我正在尝试在PHP中使用已发布的FormData形式的AJAX调用,但我无法检索变量。 我做错了什么?
这是我的Javascript
var sendData = new FormData();
sendData.append('itemid',$('select#selectItems').val());
sendData.append('itemtitle',$('#item-title').val());
sendData.append('itemtext',$('#item-text').val());
$.ajax({
url: 'ajax.file.php',
type: 'POST',
dataType: 'text',
data: sendData,
cache: false,
contentType: false,
processData: false
});
和我的PHP
$itemid = $_POST['itemid'];
echo $itemid;
总是在PHP中未定义!
如果我是print_r($ _POST);
如果我使用Firefox,则PHP文本为:
数组([----------------------------- 12850217581176488271638880149 Content-Disposition:_form-data; _name] =>“ itemid“99 ----------------------------- 12850217581176488271638880149 Content-Disposition:form-data; name =”itemtitle“The Title - --------------------------- 12850217581176488271638880149 Content-Disposition:form-data; name =“itemtext”Text ------- ---------------------- 12850217581176488271638880149--)
...使用Chrome,PHP响应是:
数组([------ WebKitFormBoundarypyFlwBB31gVYXxRP Content-Disposition:_form-data; _name] =>“itemid”99 ------ WebKitFormBoundarypyFlwBB31gVYXxRP Content-Disposition:form-data; name =“itemtitle”标题------ WebKitFormBoundarypyFlwBB31gVYXxRP Content-Disposition:form-data; name =“itemtext”Text ------ WebKitFormBoundarypyFlwBB31gVYXxRP--)
感谢
答案 0 :(得分:0)
试试这个:
$.ajax({
.
.
beforeSend: function(xhr) {
xhr.setRequestHeader('Content-Type","application/json');
}
.
.
});

或者:
$.ajax({
.
.
.
headers: {"Content-Type","application/json"}
});

答案 1 :(得分:0)
看来你已经过时了jQuery。 检查您的jQuery版本,因为您在ajax请求构造函数中使用的重要参数 processData 可从1.6版获得。
从jQuery 1.6开始,你可以传递false来告诉jQuery不要设置任何内容类型标题。
为此,请打开浏览器控制台并输入:
jQuery.fn.jquery
我有jQuery 1.4,这段代码适合我:
var file = $('.rm-action-popup-input[name=file]').attr('files')[0];
var formData = new FormData();
formData.append('file', file);
formData.append('title', params.title);
var xhrForm = new XMLHttpRequest();
xhrForm.open("POST", "/upload.php");
xhrForm.send(formData);
检查Content-Type标头的外观:
答案 2 :(得分:0)
我遇到了同样的问题。当我没有设置Content-Type属性(我使用javascript)时,它起作用了。
然后浏览器显示(在使用Chrome调试的Request Header中):
内容类型:multipart / form-data;边界= ---- WebKitFormBoundarygfXi4NfQAXa8g7PU
并且var_dump($ _ POST)向我展示了我想要的东西:
array(2){[“user”] => string(4)“test”[“pwd”] => string(7)“testpwd”}
答案 3 :(得分:0)
我用 fetch 来解决它
const options = {
method: 'POST',
body: formData,
};
fetch('/API', options).then(function(resp) {
console.log(resp);
if(resp.ok) {
resp.json().then((data) => {
console.log(data);
if (data.error) {
}else{
console.log(data);
} // ok
});
} else {
console.log('Respuesta de red OK pero respuesta HTTP no OK');
}
}).catch(function(error) {
console.log('Hubo un problema con la petición Fetch:' + error.message);
});