2012-05-29 585 views
2

jQuery代码:jQuery .getJSON()twitter搜索,结果未定义。

$(document).ready(function() { 
     $('#hit').click(function() { 
     $.getJSON("http://search.twitter.com/search.json?q=stackoverflow&callback=?", function(data) { 
      alert(data.length); 
     }); 
     }); // #button hit click evnet 
}); // document ready 

结果是不确定的。

enter image description here

我手动导航在浏览器中的API调用,它返回我的数据。

enter image description here

为什么结果是不确定我的jQuery的getJSON电话?

+0

敢肯定你正在做一个跨域请求,除非你正在为Twitter的:) –

+0

@KeithNicholas jQuery是足够聪明时,有一个切换到JSONP查询参数。 –

+0

@KeithNicholas我有'&callback =?'在电话 – gilzero

回答

3
$.getJSON("http://search.twitter.com/search.json?q=stackoverflow&callback=?", function(data) { 
    alert(Object.keys(data).length); 
}); 

返回data是一个对象,而不是一个数组,所以data.length是未定义的。

但上述过程并不支持所有浏览器。所以,你可以尝试:

data.results.length 

要检查是否有键存在的对象(如果你不知道)这是更好地使用:

if("key" in object) { 

} 

对于您的情况:

if("results" in data) { 

} 

如果您的查询成为一个错误的对象无效Twitter将响应所以要确认有关成功的查询结果,你可以使用:

if("error" in data) { 

} 

有一个叫hasOwnProperty()

if(data.hasOwnProperty("results")) { 

} 
+0

还是不明白。作为getJSON回调函数使用“数据”作为参数表示结果。为什么我们需要Object.keys(数据)? – gilzero

+0

这个答案的问题是'Object.keys'可能在所有浏览器中都不被支持。试试'alert(data.results.length)'。 –

1

如果你看一看所返回的有效载荷另一个过程,实际的结果是一个名为results属性里面。因此,尝试:“回调=”

alert(data.results.length)