我有一个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> </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
答案 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>