Javascript 为什么PHP认为这个JSON有语法错误?

Javascript 为什么PHP认为这个JSON有语法错误?,javascript,php,json,Javascript,Php,Json,我有一个JSON,它是getJSONed到一个PHP脚本,以便为一个简单的CMS更新数据库: { "pid": "3", "post": "<p><span style='text-decoration: underline;'><strong>Test</strong></span></p><br><p>blah</p><br><p>&n

我有一个JSON,它是
getJSON
ed到一个PHP脚本,以便为一个简单的CMS更新数据库:

 {
    "pid": "3",
    "post": "<p><span style='text-decoration: underline;'><strong>Test</strong></span></p><br><p>blah</p><br><p>&nbsp;</p><br><p><span style='text-decoration: underline;'><strong>Test</strong></span></p><br><p>blah</p>",
    "tagline": "",
    "title": "About"
 }
此数组通过
getJSON
转发到PHP脚本:

$.getJSON("savepost.php?json=" + JSON.stringify(arr), function(data){
    *stuff happens here*
});
我做错了什么?我是想得太多了,还是完全用错了方法

Hexdump:

7B22706964223A2233222C222706F73774223A223C703E3C7370616E207374‌​796C653D5C274657874‌​2d6465636f726174696f‌​6e3a20756e6465726c69‌​6e653b5c223e3c737472‌​6F6E673E5465757343C2F‌​7374726f6e673e3c2f73‌​70616E3C2F703E3C62‌​723e3c703e626c61683c‌​2f703e3c62723e3c703e


在编写URL时,缺少对
encodeURIComponent
(或使用合适的序列化程序)的调用。由于JSON包含
&
,在服务器上解码将截断数据。如果您在
json\u decode
之前就记录了数据,这一点是显而易见的


请注意,在GET请求中在URL中传递JSON可能不是一个好主意(由于长度限制)。我强烈建议使用POST请求,这在语义上也更有意义。

因为您使用的是getJSON,它:

使用GETHTTP请求从服务器加载JSON编码的数据

导致错误,JSON在它前面的
处结束,因为您正在执行GET请求并标记上一个参数的结束和另一个参数的开始(&M)

只需使用post,它应该可以工作:

$.post("savepost.php", {json :  JSON.stringify(arr)}, function(data) {
    // Do something here
}, 'json');

使用浏览器控制台的“网络”选项卡:请共享“savepost.php”请求的响应/预览。有时,php脚本中的空格或错误会中断json字符串。替换后,json字符串变为:
“{
”pid:“3”",
这不是有效的JSON。有点问题,但你似乎想得太多了。制作一个简单的php文件来显示行为。捕获实际的GET信息并将其硬编码到一个变量中。然后JSON_解码它,显示错误。然后在这里发布!10分之9表示你会找到错误,否则我们可以帮助你调试:)@ofirbarch它是200,在PHP中,我返回一个JSON来给出数据库更新是否成功的结果,因此总是给出
[{“valid”:“0”}]
。除了
echo JSON_last_error();
返回
4
(如前所述)之外,屏幕或PHP的日志文件上都没有报告错误。必须是其他错误:
$.post("savepost.php", {json :  JSON.stringify(arr)}, function(data) {
    // Do something here
}, 'json');