我有一系列的淘汰组件,可以执行几次ajax调用回服务器来获取数据。其中许多组件都继承了相同的javascript基类。在测试期间,我注意到偶尔这些ajax调用似乎会抓取不正确的数据。
我在$.ajax
成功方法中的浏览器控制台中设置了一个断点,我注意到有时这个成功方法甚至在网络选项卡说调用已经完成返回数据之前就会触发。当我查看返回的数据时,它会为我提供当前页面的来源,而不是查询的URL。此页面一次执行40-50个ajax调用,但每个控件都处理自己的加载。
这似乎是完全随机发生的,如果我多次在页面上放置相同的控件,通常会有几个成功加载,而其他人则不会。这就是我所拥有的:
this.Update = function () {
this.updateParameters();
$.ajax({
type: "POST",
traditional: true,
url: this.ajax_location,
data: this.ajax_parameters,
success: function (data) {
this.seriesDataItems = new Array();
var that = this;
if (data.MonthlyTotals) {
data.MonthlyTotals.forEach(function (e, i, a) {
that.seriesDataItems.push([e.Item1, (+e.Item2.toFixed(2))]); // stupid Tuple serialization...
});
}
if (data.Total) this.visitCount(this.magicRegex(+data.Total.toFixed(2)));
this.posNeg(data.PercentYTD > 0 ? "fa fa-arrow-circle-down" : "fa fa-arrow-circle-up");
this.percentage(Math.round(Math.abs(data.PercentYTD * 100)) + "%");
this.seriesData(this.seriesDataItems);
}.bind(this),
error: function (returndata) {
alert("Error:\n" + returndata.responseText);
}
});
};