我遇到了问题。我有这段代码:
setInterval(function() {
$.ajax({ url: url, success: function(data, count){
var obj = jQuery.parseJSON(data);
var content = obj.results[0].content;
}})
}, 2000)
现在这段代码每2秒运行一次并进行ajax调用。我一直在这一行得到obj为null的错误:
var content = obj.results[0].content;
我很确定这是因为当解析器到达这一行时,parseJson还没有完成。我需要一种方法来说明, obj = null 不要运行 var content = obj.results [0] .content ; 代码。
希望这是有道理的。
答案 0 :(得分:3)
如果你想成为肛门:
var content = obj && obj.results && obj.results[0] && obj.results[0].content;
但我真的不认为这是问题..只有在一切完成后才会调用回调。 JSON解析是同步的。您确定服务器正在返回正确的数据吗?
仅供参考,您还可以为dataType
调用提供jQuery.ajax
选项,以便自动完成JSON解析。
答案 1 :(得分:1)
可能值得查看数据变量的设置,以便了解为什么jQuery.parseJSON
返回null:
$.ajax({ url: url, success: function(data) {
console.log(data);
var obj = jQuery.parseJSON(data);
var content = obj.results[0].content;
}})
如果您之前没有使用过控制台,请尝试下载Firebug。
您还可以使用Daniel建议的dataType选项来简化代码:
$.ajax({ url: url, dataType: "json", success: function(data) {
var content = data.results[0].content;
}})
答案 2 :(得分:0)
对我来说,为什么方法parseJSON必须是异步的,这没有意义。
为什么不简单地写一个这样的IF语句:
...
var obj = jQuery.parseJSON(data);
if (obj != null && obj.results != null && jQuery.isArray(obj.results) &&
obj.results.length > 0 && obj.results[0].content != null) {
var content = obj.results[0].content;
/* do some processing */
}