Javascript 为什么我的Ajax回调处理得太快?
我有一个通用的ajax函数,我在代码中的许多地方调用它。它是相当标准的,除了我最近添加了一些额外的调试内容(试图解决这个问题),带有一个全局“ajaxworking”变量:Javascript 为什么我的Ajax回调处理得太快?,javascript,ajax,Javascript,Ajax,我有一个通用的ajax函数,我在代码中的许多地方调用它。它是相当标准的,除了我最近添加了一些额外的调试内容(试图解决这个问题),带有一个全局“ajaxworking”变量: rideData.myAjax = function (url, type, data, successfunc) { var dataJson = JSON.stringify(data), thisurl = quilkinUrlBase() + url; if (ajaxworking
rideData.myAjax = function (url, type, data, successfunc) {
var dataJson = JSON.stringify(data),
thisurl = quilkinUrlBase() + url;
if (ajaxworking.length > 0) {
console.log(thisurl + ": concurrent Ajax call with: " + ajaxworking);
}
ajaxworking = thisurl;
$.ajax({
type: type,
data: dataJson,
url: thisurl,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (response) {
ajaxworking = '';
successfunc(response);
},
error: webRequestFailed
});
};
现在,我的代码中有一部分根据第一次调用的结果进行了第二次ajax调用:
getWebRides = function (date) {
var rideIDs = [];
var intdays = bleTime.toIntDays(date);
rideData.myAjax("GetRidesForDate", "POST", intdays, function (response) {
rides = response;
if (rides.length === 0) {
$('#ridelist').empty(); // this will also remove any handlers
qPopup.Alert("No rides found for " + bleTime.DateString(date));
return null;
}
$.each(rides, function (index) {
rideIDs.push(rides[index].rideID);
});
GetParticipants(rideIDs);
});
},
“GetParticipants”(也称为“myAjax”)在大多数情况下运行良好。但在我的代码的另一部分中,“GetWebRides”本身是在另一个ajax调用之后直接调用的,即有3个调用,每个调用取决于前一个调用。“顶级”电话如下所示:
rideData.myAjax("SaveRide", "POST", ride, function (response) {
// if successful, response should be just a new ID
if (response.length < 5) {
// document re-arrangement code snipped here for brevity
getWebRides(date);
}
else {
qPopup.Alert(response);
}
});
rideData.myAjax(“SaveRide”、“POST”、ride、function(response){
//如果成功,响应应该只是一个新ID
如果(响应长度<5){
//为简洁起见,此处剪掉了文档重新排列代码
getWebRides(日期);
}
否则{
qPopup.警报(响应);
}
});
因此,只有当连续有三次这样的调用时,我才能在第三次调用中得到“并发”捕获:
GetParticipants:与GetRidesForDate的并发调用
并且(如果允许继续),这会导致服务器上出现严重问题,数据读取器已经打开。但为什么只有当GetParticipants被称为链中的第三个时才会发生这种情况
我明白了,经过一些研究。现在还有其他安排异步调用的方法,例如使用“承诺”,但我想了解这里发生了什么。解决了这个问题。
我在这篇文章中注释掉的“文档重组代码”的一部分实际上是间接调用另一个Ajax调用(非常间接,因此需要很长时间才能找到)