lambda函数中的变量undefined

时间:2015-03-19 09:43:35

标签: javascript variables undefined

我有这段代码:

$.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],则打印的值是未定义的。 我怎么解决?

1 个答案:

答案 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));
}