Chaining ajax requests with jQuery's deferred

后端 未结 7 2404
天涯浪人
天涯浪人 2021-02-19 19:46

I have a web app which must call the server multiple times. So far, I had a long nested callback chain; but I would like to use jQuery\'s when,then etc

7条回答
  •  你的背包
    2021-02-19 20:28

    Here is an wonderfully simple and highly effective AJAX chaining / queue plugin. It will execute you ajax methods in sequence one after each other.

    It works by accepting an array of methods and then executing them in sequence. It wont execute the next method whilst waiting for a response.

    //--- THIS PART IS YOUR CODE -----------------------

    $(document).ready(function () {

    var AjaxQ = [];
    AjaxQ[0] = function () { AjaxMethod1(); }
    AjaxQ[1] = function () { AjaxMethod2(); }
    AjaxQ[3] = function () { AjaxMethod3(); }
    
    //Execute methods in sequence
    $(document).sc_ExecuteAjaxQ({ fx: AjaxQ });
    

    });

    //--- THIS PART IS THE AJAX PLUGIN -------------------

    $.fn.sc_ExecuteAjaxQ = function (options) {

    //? Executes a series of AJAX methods in dequence
    
    var options = $.extend({
    
        fx: [] //function1 () { }, function2 () { }, function3 () { }
    
    }, options);
    
    if (options.fx.length > 0) {
    
        var i = 0;
    
        $(this).unbind('ajaxComplete');
        $(this).ajaxComplete(function () {
    
            i++;
            if (i < options.fx.length && (typeof options.fx[i] == "function")) { options.fx[i](); }
            else { $(this).unbind('ajaxComplete'); }
    
        });
    
        //Execute first item in queue
        if (typeof options.fx[i] == "function") { options.fx[i](); }
        else { $(this).unbind('ajaxComplete'); }
    
    } 
    

    }

提交回复
热议问题