chr*_*ris 0 javascript ajax jquery closures
如果我使用闭包来定义某些东西,那么有一种等待的方法,直到填充变量,然后再转到下一位.
例:
var myVari = someFunction();
$.each(myVari, function(){/*code for each*/});
Run Code Online (Sandbox Code Playgroud)
定义myVari的函数是一个AJAX调用,它可能需要一秒钟或4秒(不是快速)来定义变量.问题是,在AJAX调用产生结果之前,由于myVari为空,$ .each已经被触发并出错.有没有更好的方法来处理这种情况?
您应该调整代码,以便可以将回调传递给someFunctionAJAX调用完成时执行的回调.
您可以等待 AJAX调用完成的唯一方法是将调用更改为同步,但这是非常不鼓励的,因为它在AJAX调用期间完全锁定浏览器.
因为您已经在使用jQuery库,所以这个过程callbacks变得更加容易.我不会像你现在那样返回变量,而是返回jQuery AJAX对象(从1.6开始有一个promise接口),这样你就可以轻松地向它添加回调:
function someFunction () {
return jQuery.ajax('some/url.php', {
// whatever
});
}
var myVari = someFunction();
myVari.done(function (data) {
$.each(data, function(){/*code for each*/});
});
Run Code Online (Sandbox Code Playgroud)