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

Unwanted variable behaviour when combining .each() with $.ajax

我有一个类似于下面的函数(为了简洁这里做了简化)

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

    var me = $(this)

    var mydata = me.data('somedata')

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

        console.log(mydata)

    });

});

具有 class .someelement 的每个元素对于 somedata 具有不同的值。

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

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

我意识到这可能是由 ajax 调用的异步性质引起的,但即便如此,似乎 'buggy' 并没有通过流程选择正确的 mydata代码。我尝试将 async:false 添加到 ajax 调用中,问题消失了,但我收到一条警告,指出 async:false 在全局事物 whatchamagig 中已被弃用。

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

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

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