Javascript 为什么PHP认为这个JSON有语法错误?
我有一个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
getJSON
ed到一个PHP脚本,以便为一个简单的CMS更新数据库:
{
"pid": "3",
"post": "<p><span style='text-decoration: underline;'><strong>Test</strong></span></p><br><p>blah</p><br><p> </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:
7B22706964223A2233222C222706F73774223A223C703E3C7370616E207374796C653D5C2746578742d6465636f726174696f6e3a20756e6465726c696e653b5c223e3c7374726F6E673E5465757343C2F7374726f6e673e3c2f7370616E3C2F703E3C62723e3c703e626c61683c2f703e3c62723e3c703e
在编写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');