将 .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);
我有一个类似于下面的函数(为了简洁这里做了简化)
$('.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);