我有这段代码:
$.post("call.php", {form: data.item.value, positiony: t}, function (data){ top[t] = data;});
$("#pos" + t).css("margin-top", top[t] );
我用ajax的函数post调用一个页面,返回的值用于设置一系列div的margin-top,增量id为#pos0,#pos1 ...; 如果我用数字改变t,n次,其中n是div的数量,我没有问题;但如果我使用'for'来增加值,我在lambda函数中有未定义的变量t;事实上,如果我在lambda函数后打印top [t],则打印的值是未定义的。 我怎么解决?
答案 0 :(得分:1)
Ajax是异步。您的第二行是在之前运行ajax调用。将移动到成功处理程序中:
$.post("call.php", {form: data.item.value, positiony: t}, function (data){
top[t] = data;
$("#pos" + t).css("margin-top", top[t] );
});
另外,如果您使用t
作为计数器循环执行此操作,请注意所有成功函数都会对t
变量持久引用,不创建时的副本。所以你可能需要一个构建器函数,或只需要Function#bind
:
for (t = something; t < somethingElse; ++t) {
$.post("call.php", {form: data.item.value, positiony: t}, function (tValue, data){
top[tValue] = data;
$("#pos" + tValue).css("margin-top", top[tValue] );
}.bind(null, t));
}