我在使用以下JavaScript时出现问题,其中数据是JavaScript对象:
var ajax_send = function(data) {
var httpRequest;
makeRequest('/prototype/test.php', data);
function makeRequest(url, data) {
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = alertContents;
httpRequest.open('POST', url);
httpRequest.setRequestHeader('Content-Type', 'application/json');
httpRequest.send(JSON.stringify(data));
}
function alertContents() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
};
PHP是:
$data = $_POST['data'];
$obj = json_decode($data);
echo $obj;
在开发工具中,请求有效负载看起来确定,但它似乎不是PHP正在寻找的东西。什么都没有通过PHP脚本,响应是空的。
我做错了什么?
答案 0 :(得分:3)
使用Content-Type: application/json
发送POST请求时,PHP的工作方式会有所不同。
您将需要像这样访问它:
$postData = json_decode(file_get_contents('php://input'));
而不是通常的$_POST
。
如果您想将其作为常规表单发送到$_POST
,则需要设置标题:
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
并填充你的字段:
key=value&key2=value2&key3=value3
等