Ajax:发送formData和自定义变量

时间:2014-09-14 22:52:59

标签: php jquery ajax form-data

我正在尝试使用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]);

感谢您的帮助

2 个答案:

答案 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 );
});