可能重复:
异步在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调用的整个过程中都会保持完全的交互。