我正在尝试通过 Ajax 发送一些JSON 到 PHP 处理代码。这是我的 JavaScript:
var j = {"a":"b"};
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
};
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
console.log(xmlhttp.responseText)
};
};
xmlhttp.open("POST", "server.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
xmlhttp.send({
"json": j
});
还有PHP:
$json = $_POST["json"];
echo $json;
但这与null
相呼应。 我做错了什么?这似乎应该有效。谢谢!
请不要使用 jQuery。如果您投反对票,请告诉我原因,以便我可以改进。
最佳答案
你的j
变量是一个对象。在发布之前,您需要将其编码为 json 字符串。
好吧,我已经从头开始重写了我的答案。
像这样更新您的server.php:
<?php
// Request Handler
if (count($_POST))
{
$json = isset($_POST['json']) ? $_POST['json'] : '';
if (!empty($json))
{
$jsonObj = json_decode($json);
print_r($jsonObj);
}
else
{
echo "No json string detected";
}
exit();
}
?>
像这样改变你的ajax请求:
<script type="text/javascript">
var j = {"a":"b"};
var xmlHttp = new XMLHttpRequest();
var parameters = "json="+ encodeURIComponent(JSON.stringify(j));
xmlHttp.open("POST", "server.php", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", parameters.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
console.log(xmlHttp.responseText);
}
}
xmlHttp.send(parameters)
</script>
这是它的工作演示:
<小时/>
因此,在 PHP 脚本中,我打印 $jsonObj
及其内容。如果你想在你的脚本中使用它;你会这样做:
例如
<?php
if ($jsonObj->a == 'b') {
// do something ?
}
?>
如果您想要使用关联数组(而不是对象),您可以这样做:
更改:$jsonObj = json_decode($json);
更改为:$jsonObj = json_decode($json, true);
现在你可以这样做:
<?php
if ($jsonObj['a'] == 'b') {
// do something ?
}
?>
关于javascript - PHP 未从 Ajax 帖子接收 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23388932/