将.each()与$ .ajax组合时不需要的变量行为

时间:2015-01-17 17:52:14

标签: jquery ajax

我有一个类似于以下的功能(为简洁起见,简化)

$('.somelement').each(function(){

    var me = $(this)

    var mydata = me.data('somedata')

    $.ajax({url:"phpfile.php?data=" + mydata}).done(function(returnedhtml){

        console.log(mydata)

    });

});

.someelement的每个元素都有somedata的不同值。

当我在firebug中查看ajax调用时,我看到一个不同的mydata传递给php文件。

但是console.log(mydata)每次都记录相同的值(即并不总是传递给ajax函数中url的值)

我意识到这可能是由于ajax调用的异步性质引起的,但即便如此,它似乎也是“错误的”。通过代码流不能获得正确的mydata。我尝试将async:false添加到a​​jax调用中,问题就消失了,但我得到一个警告,即在全局的东西中不推荐使用async:false。

是否有一种简单而正确的方法可以做我想做的事情(在每个$.ajax循环中保留each()调用内外的变量一致性。

1 个答案:

答案 0 :(得分:5)

您可以使用自我调用函数(IIFE

var mydata = me.data('somedata')
(function(data){
    $.ajax({"phpfile.php?data=" + mydata})
        .done(function(returnedhtml){
            console.log(data);          
        });
})(mydata);