Используя очередь Jquery для выполнения последовательности вызовов Ajax, необходимо очистить очередь в случае сбоя запроса - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать очередь вызовов ajax, которые будут выполняться по порядку.Кажется, все работает нормально, проблема в том, что если в каком-либо из вызовов произошла ошибка, я хочу, чтобы очередь остановилась после ошибки, поэтому оставшиеся вызовы ajax в очереди не выполняются.

Я вроденовичок в идее очереди jquery, я нашел этот код в Интернете для расширения jquery:

var ajaxQueue = $({});

(function($) {

    $.ajaxQueue = function(ajaxOpts) {

        // hold the original complete function
        var oldComplete = ajaxOpts.complete;

        // queue our ajax request
        ajaxQueue.queue(function(next) {    

            // create a complete callback to fire the next event in the queue
            ajaxOpts.complete = function() {
                // fire the original complete if it was there
                if (oldComplete) oldComplete.apply(this, arguments);    
                next(); // run the next query in the queue
            };

            // run the query
            $.ajax(ajaxOpts);
        });
    };

    // this is my addition, in an attempt to find ways to clear the queue
    $.clearQueue = function(ajaxQueue) {
        ajaxQueue.clearQueue();
        ajaxQueue.stop();
    };

})(jQuery);

Затем у меня есть эта функция, чтобы добавить элемент в очередь

function queueAjax( passObj, success, ajaxQueue ) {

    $.ajaxQueue({
        url: route() + 'global_fxns/ajaxHub',
        async: true,
        data: {'passme' : encodeURIComponent( JSON.stringify( passObj ) ) },
        success: function(data) {

            var aJSON = decodeURIComponent(data);       
            var retObj = $.parseJSON(aJSON);    

            // if there was no problem, call the success function that was passed
            success( passObj, retObj );                    

        },
        error: function ( jqXHR, textStatus, errorThrown) {
            clog("error");

            // again this is my addition, trying to find ways to clear queue        
            ajaxQueue = $({});
            $.clearQueue(ajaxQueue);
        } 
    });

и, наконец,для вызова queueAjax:

    var arr = standardAjaxArray( "testQueue", 0 );
    var obj1 = { 
        arr: arr,
        count: 1
    };
    function success( passObj, retObj, ajaxQueue ) {
        clog("Queue success!");
    }
    queueAjax( obj1, success );

Проблема не в том, что я пытаюсь, я не могу освободить очередь, если в вызове ajax есть ошибка.Я намеренно помещаю сообщение об ошибке в сторону ajax PHP, затем вызываю queueAjax 4 раза, и он запускается 4 раза каждый раз.Как вы можете видеть, я попытался расширить jQuery с помощью $ .clearQueue, а также попытался передать очередь в качестве параметра в функцию ajax, но безуспешно.Любой вклад будет оценен.спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Кажется, я решил это, я был на правильном пути в определении $ .clearQueue, я просто удалил ajaxQueue = $ ({}) перед вызовом ajaxQueue.clearQueue (), и, похоже, теперь это работает.Я думаю, что используя ajaxQueue = $ ({}), что само по себе было попыткой очистить очередь, я просто переназначил переменную ajaxQueue и не опустошил ее, поэтому, когда я впоследствии вызвал .clearQueue (), эффекта не было

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...