javascript - PHP 未从 Ajax 帖子接收 JSON

标签 javascript php ajax json

我正在尝试通过 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>

这是它的工作演示:

enter image description here

<小时/>

因此,在 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/

相关文章:

php - 在 WooCommerce 中使用 PHP 按 ID 删除产品

javascript - 从简单对象创建 javascript 对象

javascript - javascript对象中的访问器和普通函数有什么区别?

php - 如何在 php/codeigniter 或 mysql 中获取相差 20 分钟的两个日期的所有组合

jquery - jqgrid加载大数据集而不分页

python - Django QuerySet 不可序列化

javascript - 仅当从 angularJS 中的 ajax 调用完全接收到 json 时才更新 View

javascript - 确定 HTML 元素是否已动态添加到 DOM

javascript - 我怎样才能为所有模态制作一个脚本?

php - 在 Laravel/Homestead 中更改数据库名称