前提:我正在尝试使用延迟来处理对Web服务的调用,完成后,处理数据,然后移动到下一个Web调用调用集。这是CMS,它的小部件,一些javascript / jquery和一些内部服务的Web调用之间的一个非常复杂的途径。
实际发生了什么:大部分时间它正在准确地返回预期的,完美的输出......大部分时间。有时似乎.done在继续之前没有正确地保持正确,并且第二个小部件的一些结果最终会出现在第一个小部件数据中。因此,我希望.done部分可能不是我需要的。
URLArray正常工作并正确链接所有内容,但由于某种原因,myJSONData并不总是包含正确的数据。 (可能包含EXTRA,来自后续的小部件),因此我建议.done不能完全按照我的预期进行操作。
有人可以帮助解决可能出错的问题。我的意思是我可以看到终点线,它的工作......大部分时间......只有这一个问题需要解决。
一般代码:
ulContactID.each(function (d) {
var URLArray = [];
var departmentList = [];
// *****************
// Get department
// *****************
var dept;
if (d == 0) {
dept = $(".departmentClass");
} else {
dept = $(".departmentClass" + d);
}
var department = dept.text();
// *************************
// Set Department Call
// *************************
if (department != "none" && department !="") {
URLArray.push('http://10.171.1.202:5185/api/employees/GetByDepartment?department=' + department);
}
// *****************
//Get Employee List
// *****************
var employees;
if (d == 0) {
employees = $(".employeeClass");
} else {
employees = $(".employeeClass" + d );
}
var employeeList;
employeeList = employees.text().split(",");
// ******************
// Set Employee Calls.
// ******************
employeeList.forEach(function (d){
URLArray.push('http://10.171.1.202:5185/api/employees/GetByUserPrincipalName?userPrincipalName=' + d);
});
Ajax Calls to Web service
$.when.apply($, Do_AjaxCalls(URLArray)).done(function () {
URLArray = [];
console.log(myJSONData);
// This is where the return myJSONData usually works, but not always.
// and then resets the array before doing another round in the loop if //needed.
});
myJSONData = [];
});
});
AJAX使用延迟调用:
// *************************
// Do Ajax Calls
// *************************
function Do_AjaxCalls(URLArray) {
var requests = [];
var arrayCount = URLArray.length;
for (i = 0; i < arrayCount; i++) {
var currURL = URLArray[i];
requests.push(
$.ajax({
type: 'Get',
url: currURL,
dataType: 'jsonp',
fail: console.log("Issue on: " + currURL),
success: function (result) {
if ($.isArray(result)) {
result.forEach(function (d) {
myJSONData.push(d);
});
} else {
myJSONData.push(result);
}
}
}))
}
return requests;
}
编辑:次要文字更新。