【问题标题】:Javascript variable not working outside function [duplicate]Javascript变量在函数外不起作用[重复]
【发布时间】:2012-12-10 05:10:09
【问题描述】:

可能重复:
How to return AJAX response Text?

我正在尝试使以下代码正常工作。我知道在函数的变量范围内我没有做正确的事情,但我不知道是什么(我主要是一名设计师,我很高兴我终于设法理解了一点 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 []

【问题讨论】:

  • 谢谢@Quentin,我读了这么多,但我没想到这是与 JSON 相关的问题。
  • @AKG:这不是 JSON 相关的,而是 Ajax 相关的。
  • 射击我:我真的是一个核心设计师。对不起,伙计们
  • console.log 移动到function twitter

标签: javascript jquery ajax json scope


【解决方案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);
...

【讨论】:

    【解决方案2】:

    问题在于运行的顺序:

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

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

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

    【讨论】:

    • 是的。 getJSON 发起一个请求,并在服务器返回它的照片对象时触发 twitter。 JavaScript 并不关心服务器会做什么,直到它真正将某些东西带回 javaScript,所以它会不断触发东西,包括那个 console.log
    • @lftah 正在阅读 jquery.ajax 文档,JSONP 不支持同步操作...
    • 对,不要写成同步的。而是将“之后”的代码放入回调函数中
    • @gareth,您介意用代码示例详细说明吗?这(ajax)对我来说是全新的领域
    • @AKG - 当 $.each 循环完成时,只需对“twitter”函数末尾的列表执行您将执行的操作(例如,将 元素添加到 DOM)并且列表已满。
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2020-02-25
    • 2021-01-03
    相关资源
    最近更新 更多