Php 使用ajax提交文件的数量
我有带文本字段和文件的表单 我正在尝试用ajax提交表单并上传文件。问题是,当我打印ajax文件(attractions control.php)中的文件数据时,我什么也没有得到:Php 使用ajax提交文件的数量,php,jquery,Php,Jquery,我有带文本字段和文件的表单 我正在尝试用ajax提交表单并上传文件。问题是,当我打印ajax文件(attractions control.php)中的文件数据时,我什么也没有得到: array (size=2) 0 => string '' (length=0) 1 => string '' (length=0) 我怎样才能解决这个问题 JS部分 e.preventDefault(); var formData = $(this).closest('form').seri
array (size=2)
0 => string '' (length=0)
1 => string '' (length=0)
我怎样才能解决这个问题
JS部分
e.preventDefault();
var formData = $(this).closest('form').serializeArray();
formData.push({name: 'act', value: 'edit'});
var file_data = $(this).parents("form").find('.multi').prop('files');
var filesArray = $(this).parents("form").find('.multi');
jQuery.each(filesArray, function(i, fileArray)
{
var files = fileArray.files;
var file;
formData.push({name: 'file[]', value: file});
});
$.ajax ({
type: 'POST',
url: 'ajax/attractions-control.php',
data: formData,
dataType : 'json',
async: false,
code : true
}).done(function(data)
{
}
HTML部分
<form id="attrac-form-<?PHP echo $mainIndex['id'] ?>" action="#" method="post" enctype="multipart/form-data" class="attrac-form">
<input type="text" name="title" >
<input type="file" name="file[]" class="multi">
<input type="file" name="file[]" class="multi">
<input type="file" name="file[]" class="multi">
<input class="attrac-submit" value="SEND" type="submit" >
</form>
使用FormData对象:
$.ajax ({
type: 'POST',
url: 'ajax/attractions-control.php',
data: new FormData($('form')[0]),
cache: false,
contentType: false,
processData: false,
async: false
})
这将向您发送此结构中的内容:
-----------------------------951861112078
Content-Disposition: form-data; name="sdfer"
0
-----------------------------951861112078
Content-Disposition: form-data; name="sfd"; filename=""
Content-Type: application/octet-stream
-----------------------------951861112078
Content-Disposition: form-data; name="zre"
0
-----------------------------951861112078
您可以通过PHP中的$_文件获取,并且所有表单都将包含,因此所有输入类型的文本(例如)也可以使用$_POST访问。请使用FormData对象:
$.ajax ({
type: 'POST',
url: 'ajax/attractions-control.php',
data: new FormData($('form')[0]),
cache: false,
contentType: false,
processData: false,
async: false
})
这将向您发送此结构中的内容:
-----------------------------951861112078
Content-Disposition: form-data; name="sdfer"
0
-----------------------------951861112078
Content-Disposition: form-data; name="sfd"; filename=""
Content-Type: application/octet-stream
-----------------------------951861112078
Content-Disposition: form-data; name="zre"
0
-----------------------------951861112078
您可以通过PHP中的$_文件获得,并且所有表单都将包括在内,因此所有输入类型的文本,例如,也可以使用$_POST访问。这对我很有用
Javascript:
var form = $(this).closest('form')[0]; // derived from your code
// remove empty file inputs from form otherwise some browsers throw error
for (i = 0; i < form.elements.length; i++) {
if (form.elements[i].type == 'file') {
if (form.elements[i].value == '') {
form.elements[i].parentNode.removeChild(form.elements[i]);
}
}
}
var formData = new FormData(form);
$.ajax({
url : "file.php",
type: "POST",
data : formData,
dataType : "json",
contentType: false,
cache: false,
processData:false
})
.done(function(data) {
console.log(data);
});
这对我有用
Javascript:
var form = $(this).closest('form')[0]; // derived from your code
// remove empty file inputs from form otherwise some browsers throw error
for (i = 0; i < form.elements.length; i++) {
if (form.elements[i].type == 'file') {
if (form.elements[i].value == '') {
form.elements[i].parentNode.removeChild(form.elements[i]);
}
}
}
var formData = new FormData(form);
$.ajax({
url : "file.php",
type: "POST",
data : formData,
dataType : "json",
contentType: false,
cache: false,
processData:false
})
.done(function(data) {
console.log(data);
});
尝试使用FormData()对象,如newformdata($('form')[0])
,您将拥有所有的内部文件,并且您的文件将可以与$\u文件一起使用。我认为这会很好,但我不确定如何做。你能给我举个例子吗@MacBooctry要使用FormData()对象,如newFormData($('form')[0])
,您将拥有所有的内部文件,并且您的文件将可以与$\u文件一起使用。我认为这会很好,但我不确定如何做。你能给我举个例子吗@MacBoocIf如果我想在帖子中添加参数,我该怎么做?在上面的代码中,我使用了formData.push({name:'act',value:'edit'})是的,我相信这是可能的。或者你可以在表单中添加一个隐藏的输入,如果我想在帖子中添加参数,我该怎么做?在上面的代码中,我使用了formData.push({name:'act',value:'edit'})是的,我相信这是可能的。或者,您可以使用表单中的值添加隐藏输入