如何在函数中的所有ajax调用完成后触发函数?

时间:2015-06-18 09:39:50

标签: jquery ajax

我有一个问题就是找到所有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需要不同的时间来完成。

请帮我找到解决这种情况的方法。

2 个答案:

答案 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调用中获得的每次成功/失败后设置的变量。

如果您收到预期的变量值,则执行所需的操作