JS中jQuery函数的过程顺序



可能重复:
异步在Ajax中意味着什么
jQuery ajax返回值

试图执行一个包含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。

默认情况下,

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

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

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

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

最新更新