可能重复:
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。
答案 0 :(得分:2)
getJSON()
是异步的。这意味着调用它只是启动操作,其余的javascript继续运行。稍后,异步操作结束,并使用返回的数据调用成功处理程序。
任何需要访问返回数据的代码必须位于成功处理程序中,或者位于从成功处理程序调用的函数中。您不能使用异步函数,只需像您尝试的那样返回user_list
。
相反,您必须重新考虑代码的组织方式,以便使用user_list
的代码位于成功处理程序中或从成功处理程序中调用。
getJSON()
可以设置为同步,但这通常是在javascript中编程的一种不好的方式,因为它会在网络调用期间锁定浏览器,这通常是一种糟糕的用户体验。相反,如果您正确编写代码来处理它是非同步的,那么浏览器在ajax调用的整个持续时间内保持完全交互。