我正在尝试使用ajax上传图片。
如果我这样做,这是有效的:
$("#adv_cover").change(function(e){
e.preventDefault();
var formData = new FormData($('#adv_form_cover')[0]);
$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});
然后在PHP中我得到这样的数据:
if($_FILES["adv_cover"]["name"]) {}
行。
但是现在,我也需要发送一个ID,所以根据我在这里找到的一些案例,我就是这样做的。
$("#adv_cover").change(function(e){
e.preventDefault();
var formData = new FormData();
formData.append('id', '1300');
formData.append('adv_cover', $('#adv_form_cover')[0]);
$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});
然后在PHP中我尝试获取这样的数据:
$id=$_POST['id'];
if($_FILES["adv_cover"]["name"]) {}
但我现在什么都没有。
我也尝试了console.log formData ['id']和formData ['adv_cover'],没有成功,所以看起来问题至少是在javascript方面。
请注意,我也试过了两个:
formData.append('adv_cover', $('#adv_form_cover')[0]);
和
formData.append('adv_cover[]', $('#adv_form_cover')[0]);
感谢您的帮助
答案 0 :(得分:5)
虽然new FormData()
调用接受HTML表单元素,但.append()
方法却不会:
追加
<强>值强>
该领域的价值。可以是Blob,File或字符串,如果两者都不是,则将值转换为字符串。
(取自https://developer.mozilla.org/en-US/docs/Web/API/FormData)
因此,为了在使用append方法时发送文件 - - 您需要获取File对象或文件的Blob。我目前没有可用于测试的设置,但您可以使用以下命令访问File对象:
$('#adv_form_cover').get(0).files[0]
或没有jQuery:
document.getElementById('adv_form_cover').files[0]
因此,或许尝试使用您喜欢的附加值作为附加值,使用以下版本:
无效 追加( DOMString 名称,文件 值< / strong>,可选 DOMString 文件名);
formData.append('adv_cover', $('#adv_form_cover').get(0).files[0], 'filename');
虽然要工作,但肯定需要在输入中选择一个文件。如果您记录console.log()
,myfile
会说什么?
您可以尝试的另一件事是合并您的两种方法,基本上您使用第一个示例创建表单:
var formData = new FormData($('#adv_form_cover')[0]);
然后追加额外的数据,如下:
formData.append('id', '1300');
这可能有效,并且从本页的底部开始:
https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects
答案 1 :(得分:-1)
您可以传递多个参数
$.ajax({
type: "POST",
url: "edit.php",
data: { id: "ID HERE", adv_cover: "ADV COVER HERE" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});