我想进行ajax调用,将JSON和文件数据发送到我的PHP后端。这是我目前的ajax电话:
$.ajax({
type: 'POST',
dataType: 'json',
data: jsonData,
url: 'xxx.php',
cache: false,
success: function(data) {
//removed for example
}
});
数据(jsonData)是一个JSON数组,它也保存文件选择的输入(我假设这是错误的,因为类型不匹配)。我尝试使用contentType: false
和processData: false
,但当我尝试在PHP中访问$_POST
数据时,没有任何内容。我传递的数据不是来自一个表单而且有很多它所以我不想使用FormData
并将它附加到该对象。我希望我不必进行两次ajax调用来实现这一目标。
答案 0 :(得分: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
?>
答案 1 :(得分:0)
尝试使用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");
}
});
答案 2 :(得分: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");
}
})