JS中jQuery函数的程序顺序

时间:2012-07-26 20:55:21

标签: javascript jquery

  

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

尝试将包含jQuery函数(getJson())的函数作为其中的一部分,但是当我运行它时,我的javascript函数在调用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。

1 个答案:

答案 0 :(得分:2)

默认情况下,

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

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

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

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