仅在变量不等于null时运行代码

时间:2010-08-16 21:36:45

标签: javascript jquery

我遇到了问题。我有这段代码:

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 ; 代码。

希望这是有道理的。

3 个答案:

答案 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 */
 }