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

时间:2017-01-29 20:56:35

标签: javascript php json

我有一个JSON,(function ($) { var FunClass; FunClass = function () { console.log("FunGlobal"); function FunClass() { console.log("FunConstructor"); } FunClass.prototype.letsFun = function () { console.log("FunMethod"); } }(); $.fn.fun = function () { var funClass; return this.each(function () { funClass = new FunClass(); funClass.letsFun(); }); }; }(jQuery)); 为PHP脚本,以便为简单的CMS更新数据库:

getJSON

在PHP中,它用 { "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" } 解码,然后发送到数据库。

它工作正常,JSONLint报告JSON有效,但是PHP的json_decode失败,错误4,即'语法错误'。我不确定哪个是正确的(我从我发送的json_decode请求中复制了上面的JSON,因此应该在JS方面有效。)

我使用GET从JS端的数组创建JSON。数组如下:

JSON.stringify

此数组通过var arr = { pid : "<?php echo $pId; ?>", post : $("#edit_target_preview").html(), tagline : document.getElementById('page_tagline').value, title : document.getElementById('page_title').value, }; 转发到PHP脚本:

getJSON

我在这里做错了什么?我是否过度思考这个问题,或者使用完全错误的做法?

进制打印:

  

7b22706964223a2233222c22706f7374223a223c703e3c7370616e207374 796c653d5c2274657874 2d6465636f726174696f 6e3a20756e6465726c69 6e653b5c223e3c737472 6f6e673e546573743c2f 7374726f6e673e3c2f73 70616e3e3c2f703e3c62 723e3c703e626c61683c 2f703e3c62723e3c703e

2 个答案:

答案 0 :(得分:4)

在撰写您的网址时,您错过了对encodeURIComponent(或使用体面的序列化程序)的调用。由于您的JSON包含&,因此服务器上的解码将截断您的数据。如果您在json_decode之前记录了数据,那将是显而易见的。

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

答案 1 :(得分:1)

因为你正在使用getJSON:

  

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

<p>导致错误,JSON在$.post("savepost.php", {json : JSON.stringify(arr)}, function(data) { // Do something here }, 'json'); 之前结束,因为您正在执行GET请求和&amp;标记上一个参数的结尾和另一个参数的开头......

只需使用帖子,它应该有效:

<div class="box" id="box">
  <h1 class="headline">ABOUT ME</h1>
</div>