Javascript Ajax在同一请求中发送数组和图像

Javascript Ajax在同一请求中发送数组和图像,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我想进行一个ajax调用,将JSON和文件数据发送到我的PHP后端。这是我当前的ajax调用: $.ajax({ type: 'POST', dataType: 'json', data: jsonData, url: 'xxx.php', cache: false, success: function(data) { //removed for example } }); datajsonData是一个JSON

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

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

datajsonData是一个JSON数组,它也保存来自文件选择的输入。我假设这是错误的,因为类型不匹配。我尝试使用contentType:false和processData:false,但当我尝试在PHP中访问$\u POST数据时,什么都没有。我传递的数据不是来自表单,而且有很多表单,所以我不想使用FormData并将其附加到该对象。我希望我不必通过两次ajax调用来实现这一点。

如果您想随任何文件发送数据,则可以使用object

按如下方式发送您的jsonData:

在PHP中,您可以通过以下方式检查数据和文件:


若要随任何文件一起发送数据,则可以使用对象

按如下方式发送您的jsonData:

在PHP中,您可以通过以下方式检查数据和文件:

尝试使用而不是普通的序列化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

下面是一个例子:

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");
          }
    });

你也可以这样试试

您也可以访问此答案

HTML

JS


你也可以这样试试

您也可以访问此答案

HTML

JS


这有用吗?var jsonData=new FormDatadocument.getelementbyidiourformid;您可以使用FormData获取输入和文件现在您没有有效的解决方案,请尝试itI没有@devpro表单,但我将尝试将当前数据附加到FormData对象是的,只需将数据附加到FormData中这有帮助吗?var jsonData=new FormDatadocument.getelementbyidiourformid;你可以使用FormData获取输入和文件现在你没有什么有效的解决方案,试试itI没有@devpro表单,但我会尝试将我的当前数据附加到FormData对象是的,只需将数据附加到FormData中。如果我的值之一也是JSON对象,这会起作用吗?不,你会将它们作为普通的POST表单获取,您可以执行print\r$\u POST来检查值。另一方面,可以使用FormData添加Json。例如:formData.appendJSON,您的_JSON_OBJ;如果我的其中一个值也是JSON对象,这会起作用吗?不,您将以正常的POST形式获取它们,您可以执行print\u r$\u POST来检查这些值。另一方面,可以使用FormData添加Json。例如:formData.appendJSON,您的_JSON_OBJ;
<input id="fuDocument" type="file" accept="image/*" multiple="multiple" />
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");                    
    }        
 })