0

我正在使用 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()我不能。echojson_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);
});

最终编辑:
我终于自己解决了。我实际上甚至在我问之前就发现了这个问题,但认为它是“无害的”,并且认为这不会导致这个问题。

4

1 回答 1

0

我找到了答案!当我运行它时,jsonlint.com它说由于反斜杠而无效。我认为这些只是为了将 JSON 中的引号标记为普通引号,而不是字符串结尾和开头的引号,我认为它们是“无害的”。
然后我想到了函数addslashes(),并认为也应该有一个相反的函数。我发现stripslashes()并解决了问题。

新代码:

// code to check if the user is logged in
$post = json_decode(stripslashes($_POST['q']));
echo "var_dump(\$_POST['q']): ";
var_dump($_POST['q']);
echo "<BR /><BR />";
echo "var_dump(\$post): ";
var_dump($post);    
于 2013-01-14T11:59:25.763 回答