这让我疯了。这就是我想要做的事情;
对于我的页面上每个具有'gauge'类的DIV,我需要通过Ajax发出一个jquery Post请求,其中包含来自ViewModel的一些参数(在下面的代码片段中称为“params”)。每个div的ID都在请求中使用,因此服务器知道请求所针对的页面部分,因此可以使用正确的数据进行响应。然后,当收到响应时,将使用响应中的数据更新div。
这是jquery代码;
function updateGauges() {
$(".gauge").each(
function() {
guid = this.id;
var url = "/path/to/get_data/1/" + guid;
$.post(url,JSON.stringify(params)).done(function(data){
var score = data.score;
var divToUpdate = $('#'+guid);
divToUpdate.append(score);
});
}
);
}
假设页面中有两个div,其类别为“gauge”。发生的事情是.each()循环在收到第一个ajax请求的响应之前更新变量“guid”。因此,当第一个ajax响应到来时,“guid”的值指的是第二个div的id,所以第二个div用第一个div的数据更新。
我通过设置
来完成这项工作$.ajaxSetup({async: false});
但是,当然,这会降低用户体验,迫使他们在发出所有请求并收到回复时等待。
感激不尽的任何帮助!正如您可能已经猜到的那样,JavaScript不是我的强项。
答案 0 :(得分:2)
你需要让guid
成为一个局部变量,这样你就可以在每个闭包中保存一个不同的变量。
var guid = this.id;