2

可能重复:
如何返回 AJAX 响应文本?

我正在尝试使以下代码正常工作。我知道在函数的变量范围内我没有做正确的事情,但我不知道是什么(我主要是一名设计师,我很高兴我终于设法理解了一点 JSON 的含义)。任何人都可以将我推向正确的方向吗?谢谢 :)

var list = new Array();

//Twitter
function twitter(photos){
    $.each(photos.results, function(index, photo){
        if (photo.entities.media){
            list.push(photo.entities.media[0].media_url);
            console.log(list); // working here, returns array
        }
    });     
}
var url = "https://search.twitter.com/search.json?callback=?&q=%23pikachu&include_entities=true&count=50";
$.getJSON(url, twitter);

console.log(list); //not working here, returns []
4

2 回答 2

7

问题在于运行的顺序:

  1. 从 Twitter 请求 JSON
  2. 打印列表(空)
  3. JSON 响应 - 列表被填满。

您可以通过在日志中添加时间戳来验证(即。console.log(new Date() + ' '+list))。

解决问题的最简单方法是在回调结束时调用后续逻辑,而不是在 getJSON 行下方。

于 2012-12-23T10:17:13.060 回答
1

代码中的参数“twitter”不是指函数“twitter”,而是一个名为“twitter”的变量:

$.getJSON(url, twitter);

您的代码应如下所示:

...
var twitter = (function(photos){
    $.each(photos.results, function(index, photo){
        if (photo.entities.media){
            list.push(photo.entities.media[0].media_url);
            console.log(list); // working here, returns array
        }
    });     
});
var url = "https://search.twitter.com/search.json?callback=?&q=%23pikachu&include_entities=true&count=50";
$.getJSON(url, twitter);
...
于 2012-12-23T13:08:14.167 回答