好的,我完全糊涂了。我确定这是一个范围或封闭的事情,但有人可以解释为什么
$(document).ready(function() {
var test = 0;
var whatev = [1,2,3,4,5];
$.each(whatev, function(i, v) {
test += 1;
});
alert(test);
});
提醒“5”和
$(document).ready(function() {
var test = 0;
var whatev = [1,2,3,4,5];
$.each(whatev, function(i, v) {
$.ajax('http://example.com/').done(function(data) {
test += 1;
});
});
alert(test);
});
提醒0?为什么$.each
调用中的匿名函数可以访问测试但是ajax调用的匿名函数没有?匿名函数在哪里被定义?
答案 0 :(得分:2)
那是因为
$.ajax('http://example.com/').done();
是异步的。
function(data) {
test += 1;
}
所有代码执行完毕后都会调用。
答案 1 :(得分:1)
JQuery each
的回调是同步的。
JQuery Ajax (异步javascript和xml)的回调是异步的。
如果你想让ajax函数同步,你可以这样做:
$.ajax({
type: "GET",
url: "http://example.com/",
async: false
})
答案 2 :(得分:0)
你可以使用回调,一切都会等待
循环等待ajax回调,警报等待完成循环
function request(callback){
$.ajax('http://example.com/').done(function(data) {
callback();
});
}
var y = 0;
function loop(whatev,callback){
request(function(){
test += 1;
y++;
if(y >= whatev.length){
//stop looping and trigger callback (alert)
callback();
}else {
loop(whatev);
}
});
}
$(document).ready(function() {
var test = 0;
var whatev = [1,2,3,4,5];
loop(whatev,function(){
alert(test);
});
});