我有一个问题就是找到所有ajax完成的时间。这是我的功能。
function getValuesForTablePropertySelected(questionList, itemsArray) {
for (var i = 0; i < itemsArray.length; i++) {
switch (itemsArray[i]) {
case "Tags":
loadTag(questionList);
break;
case "Date Created":
displayTablePropertySelected(itemsArray);
break;
case "Date Last Used":
loadDLU(questionList);
break;
case "Number of Launched Surveys Used In":
loadNLSU(questionList);
break;
case "Number of Reponses":
loadNR(questionList);
break;
case "Type 1 Associations":
loadT1A(questionList);
break;
case "Type 3 Associations":
loadT3A(questionList);
break;
case "Sites Linked To":
loadSLT(questionList);
break;
case "Last Modified By":
displayTablePropertySelected(itemsArray)
break;
default:
break;
}
}
showResult();
}
&#34; CASE&#34;中的每个功能;包含一个ajax调用。我只需要使用异步调用。
我想触发&#34; showResult()&#34;在所有功能中完成AJAX完成后 。不同的AJAX需要不同的时间来完成。
请帮我找到解决这种情况的方法。
答案 0 :(得分:3)
您可以使用jQuery .ajaxComplete()
轻松完成:
// create a counter (global)
var ajax_calls_counter = 0;
// in your current code, in each ajax call success, add 1 to the counter
// manage ajax succeeded events
$(document).ajaxComplete(function(){
if( ajax_calls_counter == itemsArray.length ){
showResult();
}
});
示例(jsFiddle):
$(function(){
$(this).ajaxComplete(function(){
var $body = $('body');
$body.append('ajax number '+ counter +' call complete!<br />');
if( counter == array.length ) $body.append('<strong>all</strong> ajax calls completed');
});
var array = [1, 2, 3, 4, 5];
var counter = 0;
for( var i = 0; i < array.length; i++ ){
$.ajax({
url: location.href,
success: function(){
counter++;
}
});
}
});
答案 1 :(得分:0)
对于单个AJAX调用。您可以在成功块中编写代码。但是如果你想更好地检查多个AJAX调用的状态,你可以使用你在从AJAX调用中获得的每次成功/失败后设置的变量。
如果您收到预期的变量值,则执行所需的操作