代码非常复杂,所以我在下面进行了简化,以确认我遇到的行为是正常的还是由于我在代码中犯了一些其他错误。
我有两个单独的 ajax 请求,每个请求都有自己独特的回调。我不在乎哪个先完成,一个不依赖另一个
function ajax(url, cbS){
$.ajax({
url: url,
contentType: 'application/json',
dataType: 'json',
success: function(data){
cbS(data)
},
});
}
function callbackSuccess1(data){
$('#div1').html(data)
}
function callbackSuccess2(data){
$('#div2').html(data)
}
//request#1
ajax(myapiurl+'&peram1=100', callbackSuccess1);
//request#2
ajax(myapiurl+'&peram2=200', callbackSuccess2);
问题:有时 callbackSuccess1 会获取用于 request#2 的数据,反之亦然。
似乎哪个请求首先完成会触发 callbackSuccess1,第二个完成会触发 callbackSuccess2。
我需要将回调绑定到它的特定请求,以便无论他们完成每个请求的顺序如何,它都是正确的回调。
其他信息:我的支持是 django-tastypie,在这一点上,我认为 sweetpie 以某种方式弄乱了响应。这是唯一合乎逻辑的结论,因为 javascript 似乎是不可变的。
这实际发生的证据是,当我检查对请求#1 的响应时,数据对象显然是为请求#2 准备的......
结论:感谢您确认“每次调用 ajax() 函数都会创建它自己的闭包”。这就是我认为出了问题的地方。我在我的 API 中发现了问题。我正在做一些时髦的事情,看起来我有一个变量没有及时被丢弃,如果第一个请求比第二个请求花费的时间长,API 会返回错误的数据。