2014-01-23 81 views
0

我正在使用google新闻搜索api并以json格式取回数据。我使用ajax来获取数据并通过它解析。jquery check json data

这是我的代码:

function doAjax(query){ 
    alert(query); 
    var target = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q="+query+"&rsz=large"; 
    $.ajax({ 
     url: target, 
     cache: false,     
     dataType:'jsonp', 
     success: function(data) { 
      //alert(data.responseData.results); 
      for(var x = 0; x < 8; x++){ 
       var title = data.responseData.results[x].titleNoFormatting; 
       //var content = data.responseData.results[x].content; 
       //var image = data.responseData.results[x].image.url; 

       $("#home").append(x+"---"+title+'<hr>'); 
      } 
     }, 
     error: function(jxhr,e){ 
     alert(jxhr.status+" --- "+e.responseText); 
     } 
    }); 
} 

当我运行的代码,这样我拿到8个冠军。但是当我取消注释此行var image = data.responseData.results[x].image.url;时,我只能得到3或4个结果。我调查了从谷歌检索的数据,我发现一些结果没有图像。如何检查json结果是否有图像。即使没有图像,我仍然想显示文章的标题。

+1

图像= data.responseData.results [X] .image && data.responseData.results [x] .image.url – dandavis

+0

var image = data.responseData.results [x] .image; image = image && image.url; – dandavis

回答

1

您应该查看图像存在之前得到它的URL

if(typeof(data.responseData.results[x].image) == "undefined"){ 
    alert('no image'); 
}else{ 
    var image = data.responseData.results[x].image.url; 
} 
1

是什么反应是什么样子?大多数浏览器都有开发者工具,可以让你看到请求和响应。很有可能,你的循环会窒息,因为data.responseData.results[x].image未定义,所以data.responseData.result[x].image.url会抛出一个类型错误(undefined没有url属性)。

为了防止这种情况,只是检查它是这样的:

if(data.responseData.result[x].image) { 
    var image = data.responseData.result[x].image.url; 
} 

如果data.responseData.result[x].imageundefined那么它将作为falsey和if的身体评估将不被执行(并不会抛出一个错误,将你从函数中解脱出来)。

1

可以检查图像像

if (typeof data.responseData.image != 'undefined' && typeof data.responseData.image.url != 'undefined') { 
    // set the image here 
} 
1

Typeof可以用来确定是否变量被定义或没有。

var var_one = ""; 

alert(typeof var_one); // alerts "string" 
alert(typeof var_two); // alerts "undefined" 
alert(typeof var_two == "undefined"); // alerts "true" 

所以可以指定:

if (typeof var_two != "undefined") 
{ 
    alert("variable is undefined!"); 
} 
else 
{ 
    alert("variable is defined... use it!"); 
} 

考虑到上述帐户,则可以这样做:

var image = ""; 

if (typeof data.responseData.results[x].image.url != "undefined") 
{ 
    image = data.responseData.results[x].image.url; 

    // You can then specify where the image url will go. 
}