【问题标题】:Ajax send array and Image in same requestAjax 在同一个请求中发送数组和图像
【发布时间】:2017-02-09 03:01:34
【问题描述】:

我想进行一个将 JSON 和文件数据发送到我的 PHP 后端的 ajax 调用。这是我目前的 ajax 调用:

    $.ajax({
    type: 'POST',
    dataType: 'json',
    data: jsonData,
    url: 'xxx.php',
    cache: false,
    success: function(data) { 
        //removed for example
    }
});

data(jsonData) 是一个 JSON 数组,它也保存来自文件选择的输入(我假设这是错误的,因为类型不匹配)。我尝试使用contentType: falseprocessData: false,但是当我尝试在PHP 中访问$_POST 数据时,那里什么也没有。我传递的数据不是来自表单,而且有很多,所以我不想使用FormData 并将其附加到该对象。我希望我不必进行两次 ajax 调用来完成此操作。

【问题讨论】:

  • var jsonData = new FormData(document.getElementById("yourFormID")); 你可以使用 FormData 获取输入和文件
  • 现在你有几个有效的解决方案,试试吧
  • 我没有 @devpro 表单,但我会尝试将当前数据附加到 formdata 对象
  • 是的,只需将数据附加到FormData()

标签: javascript php jquery json ajax


【解决方案1】:

你也可以这样试试

您也可以访问此答案 https://stackoverflow.com/a/35086265/2798643

HTML

<input id="fuDocument" type="file" accept="image/*" multiple="multiple" />

JS

var fd = new FormData();
var files = $("#fuDocument").get(0).files; // this is my file input in which We can select multiple files.
fd.append("kay", "value"); //As the same way you can append more fields

for (var i = 0; i < files.length; i++) {
    fd.append("UploadedImage" + i, files[i]);
}

$.ajax({
    type: "POST",
    url: 'Url',
    contentType: false,
    processData: false,
    data: fd,
    success: function (e) {
        alert("success");                    
    }        
 })

【讨论】:

    【解决方案2】:

    尝试使用formdata而不是普通的序列化json

    这是一个例子:

    var formData = new FormData();
    formData.append("KEY", "VALUE");
    formData.append("file", document.getElementById("fileinputID").files[0]); 
    

    然后在你的 ajax 中

    $.ajax({
        type: 'POST',
        url: "YOUR URL",
        data: formData,
        contentType: false,
        processData: false,
        dataType: 'json',
        success: function (response) {
           CallBack(response, ExtraData);
        },
        error: function () {
                  alert("Error Posting Data");
              }
        });
    

    【讨论】:

    • 如果我的值之一也是 JSON 对象,这会起作用吗?
    • 不,您会将它们作为普通的 POST 表单获取,您可以执行 print_r($_POST) 来检查值。另一方面,您可以使用 FormData 来添加 Json。例如:formData.append("JSON", YOUR_JSON_OBJ");
    【解决方案3】:

    如果您想与任何文件一起发送数据,则可以使用FormData 对象。

    像这样发送你的jsonData

    var jsonData = new FormData(document.getElementById("yourFormID"));
    

    比在 PHP 中,你可以检查你的数据和文件:

    <?php
    print_r($_POST); // will return all data
    print_r($_FILES); // will return your file
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      相关资源
      最近更新 更多