2016-09-30 50 views
1

我想做一个ajax调用,将JSON和文件数据发送到我的PHP后端。这是我目前的Ajax调用:Ajax发送阵列和图像在相同的请求

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

的数据(jsonData)是一个JSON数组,还拥有一个文件中选择和输入(我假定这是错误的,由于类型不匹配)。我尝试使用contentType: falseprocessData: false,但是当我尝试访问PHP中的$_POST数据时,没有任何内容。我传递的数据不是来自表单,而是有很多,因此我不想使用FormData并将其附加到该对象。我希望我不需要做两个Ajax调用来完成这个。

+0

这是帮扶? http://stackoverflow.com/questions/10899384/uploading-both-data-and-files-in-one-form-using-ajax – Blackbam

+0

var jsonData = new FormData(document.getElementById(“yourFormID”));'你可以使用FormData获取输入和文件 – devpro

+0

现在你有几个有效的解决方案,试试吧 – devpro

回答

0

如果你想发送数据连同任何文件,你可以使用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 
?> 
0

尝试使用formdata而不是正常序列化JSON

下面是一个例子:

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

然后在阿贾克斯

$.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"); 
      } 
    }); 
+0

如果我的值之一也是JSON对象,这个工作吗? – urnotsam

+0

不,你会得到他们作为一个正常的POST形式,你可以做print_r($ _ POST)来检查值。 另一方面,你可以使用FormData来添加Json。例如: formData.append(“JSON”,YOUR_JSON_OBJ“); – TestCandidate

0

你可以尝试这样也

您可以访问这个答案也 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");      
    }   
})