我正在使用 AJAX 将一些数据发布到 PHP 页面,但我无法对其进行解码。json_decode()
返回 NULL。所以我想如果我回显它,我可以通过 jsonlint 运行它。但什么都没有出现。为了找出数据是否到达我尝试数据的 PHP 页面var_dump()
。奇怪的是它显示:
string(75) "{\"title\":\"fds\",\"body\":\"fds\",\"tags\":\"fds\",\"type\":\"question\"}"
所以数据到达页面。删除反斜杠后,我通过 jsonlint 运行它,它说 JSON 是有效的。这怎么可能?
根据和 jsonlint,我得到了一个 75 个字符的有效 JSON 字符串,但var_dump()
我不能。echo
json_decode()
编辑:
显然我做错了什么,我现在可以回显它(我可能在$_POST
数组键中打错了)。它呼应了这一点:
{\"title\":\"tre\",\"body\":\"tre\",\"tags\":\"tre\",\"type\":\"question\"}
再一次,没有反斜杠 JSONLint 告诉我它是有效的 JSON。
编辑2:
这是PHP代码:
// code to check if the user is logged in
$post = json_decode($_POST['q']);
echo "var_dump(\$_POST['q']): ";
var_dump($_POST['q']);
echo "<BR /><BR />";
echo "var_dump(\$post): ";
var_dump($post);
输出:
var_dump($_POST['q']): string(74) "{\"title\":\"gfd\",\"body\":\"gf\",\"tags\":\"gfd\",\"type\":\"question\"}"
var_dump($post): NULL
JS代码:
var simpleObj = {title: "rew", body: "rew", tags: "rew", type: "question"};
$.post('savepost.php', "q=" + JSON.stringify(simpleObj), function(data) {
$('#resultDiv').html("DATA: " + data);
});
最终编辑:
我终于自己解决了。我实际上甚至在我问之前就发现了这个问题,但认为它是“无害的”,并且认为这不会导致这个问题。