我有php脚本从DB返回数据并创建一个json样式的文本,如下所示:
{ "company" : [ { "value" : "siemens" }, { "value" : "cocacola" } ], "order" : [ { "value" : "John" }, { "value" : "Mary" } ], "mob" : [ { "value" : "123123123" }, { "value" : "123123123" } ] }
我通过jquery解析它:
$.ajax({
type: "POST",
url: dir + "get_data.php", // this on gets text you can se above
success: function(html){
try {
var autocomplete = $.parseJSON(html);
}
catch(e) {
alert('invalid json');
$('#content').append(html)
}
}
})
虽然一段时间它返回“无效的json”,尽管数据库结构或代码中没有任何内容未被更改。早些时候它工作得很好 - 只是完美!改变的一切只是来自用户的新条目,因为数据是自动填充字段。我的第一个想法是用户输入了一些没有正确过滤的特殊标志,即引号或大括号。我通过http://json-validator.com/和http://jsonlint.com/检查了它们 - 它们都说它是正确的json。接下来的想法是,以某种方式json文件是大的解析,它解析它的一部分。你有什么想法吗?
解决方案:
有些用户输入了数据库制表符号,这些符号正在弄乱json解析。如果你有类似的问题 - 先从中清除数据库并设置某种过滤器来输入数据。祝好运。闭!
答案 0 :(得分:0)
你可以在这里做几件事:
确保您使用的是最新版本的jQuery。
使用jQuery的AJAX函数指定数据类型有助于查明错误。请尝试以下代码:
$.ajax({url: dir + "get_data.php", type: "json"})
.done(function(data) {
var autocomplete = data;
})
.fail(function(xhr, response, error) {
alert('Request failed: ' + error);
console.log('%o', xhr);
$('#content').append(response);
});
在控制台中记录的jqXHR
对象和从error
抛出的$.ajax
之间,您可能能够获得有关解析JSON出错的原因的更具体信息。
最后,请检查the documentation for jQuery.parseJSON()
并确保新行和标签字符的问题都不适用于您。