我有一个类似于以下的功能(为简洁起见,简化)
$('.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
添加到ajax调用中,问题就消失了,但我得到一个警告,即在全局的东西中不推荐使用async:false。
是否有一种简单而正确的方法可以做我想做的事情(在每个$.ajax
循环中保留each()
调用内外的变量一致性。
答案 0 :(得分:5)
您可以使用自我调用函数(IIFE)
var mydata = me.data('somedata')
(function(data){
$.ajax({"phpfile.php?data=" + mydata})
.done(function(returnedhtml){
console.log(data);
});
})(mydata);