【问题标题】:Procedural order of jQuery functions inside JS [duplicate]JS中jQuery函数的程序顺序[重复]
【发布时间】:2012-07-27 05:05:23
【问题描述】:

可能重复:
What does Asynchronous means in Ajax?
jQuery ajax return value

尝试执行包含 jQuery 函数 (getJson()) 作为其中一部分的函数,但是当我运行它时,我的 javascript 函数返回 before 调用 getJson()。我想知道为什么没有按顺序调用 getJson,以及如何解决它。

function getUsers(screen_name){
user_list=[]  
var id_list =[]

    $.getJSON(url,  function(json)
    {   
        //do stuff here, I have breakpoint #1 here
    });

    return user_list //breakpoint #2 is here
}

从控制台运行它时:getUsers('myUser') 它首先到达断点 #2,然后到达断点 #1。

【问题讨论】:

  • getJSON 被按顺序调用,但它发出了一个 Ajax 请求。
  • 必须有几个 dozen 版本的这个问题已经在 SO 上提出并回答了。
  • 但我还是找不到。我要删了
  • 我从来不会在没有先搜索几分钟的情况下提出问题,而且我通常会找到与我的问题完全相同的副本。在这种情况下,我什至不知道我在搜索什么词。是的,搜索“async getjson return”或快速得到答案,但我不知道我正在搜索单词 async,它变成了关键词。无论如何,谢谢。

标签: javascript jquery


【解决方案1】:

getJSON() 默认是异步的。这意味着调用它只是开始操作,其余的 javascript 继续运行。稍后,异步操作完成,并使用返回的数据调用成功处理程序。

任何需要访问返回数据的代码必须要么在成功处理程序中,要么在您从成功处理程序调用的函数中。您不能使用异步函数而只返回user_list,就像您尝试的那样。

相反,您必须重新考虑代码的组织方式,以便使用 user_list 的代码位于成功处理程序中或从成功处理程序中调用。

getJSON() 可以设置为同步,但这通常是用 javascript 编程的一种不好的方式,因为它会在网络调用期间锁定浏览器,这通常是一种糟糕的用户体验。相反,如果你正确地编写代码来处理它是异步的,那么浏览器会在 ajax 调用的整个持续时间内保持完全交互。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2012-07-15
    • 2016-04-07
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多