как убить запросы ajax - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь создать скрипт, который будет работать даже при сбое, пока не будет возвращено определенное слово. Нижняя функция будет работать около 30 секунд, останавливаться из-за PHP-скрипта (что я и хочу), а затем jquery будет запускать его снова и снова (пока не будет возвращен определенный триггер). Верхняя функция get_data (); будет выполняться каждые две с половиной секунды после того, как сам завершит запрос (в основном выясняется, на каком этапе находится другой запрос.

Моя проблема в том, чтобы держать вещи в порядке, когда запрос снова активируется, он снова запускает функцию get_data(), которая не нужна, если только в этом случае не происходит ошибка. Чтобы преодолеть это, я просто хотел прекратить все запросы ajax и начать заново (функция get data запускает только небольшой php-скрипт, который при максимальном времени займет полсекунды для обработки, а другой - около 10 секунд, поэтому он не будет выполнять много). вредно делать это) но я не могу заставить его завершить запросы ajax, я просто продолжаю запускать несколько get_data() запросов во всех направлениях ...

$(document).ready(function() {
    var number = 0;
    var requests = [];

    function kill_requests( requests ){
        $.each( requests, function( i, v ){
            v.abort();
        })
    }
    function get_data( url, requests ){
        $('#requests').html( number );
        requests.push( $.ajax({ 
            type: 'POST', url: './scrape/ajaxGetData.php', data: 'url=' + encodeURIComponent(url), cache: false, timeout: 10000,
            error : function(){ },
            success: function(html){ 
                if( html.substr(0,12) == '<!-- die -->' ) {
                    kill_requests( requests );
                    $("#result").html('<p>Complete...</p>' + html );
                }else{
                    $("#result").html(html);
                    window.setTimeout( function(){ number++; get_data( url, requests ) }, 2000 );
                }
            }                           
        }));
    }
    $("input[name=submit]").live( "click", function(){
        var url = $("input[name=url]").val();
        requests.push( $.ajax({ 
            type: 'POST', url: './index.php', data: 'submit=true&url=' + encodeURIComponent(url), cache: false,
            error : function(){ 
                kill_requests( requests ); 
                $("input[name=submit]").trigger('click'); 
            },
            success: function(html){ 
                $("#result2").html(html); 
                if( html.substr(0,12) != '<!-- die -->' ) {
                    kill_requests( requests );
                    $("input[name=submit]").trigger('click');
                }
            }                           
        }));
        get_data( url, requests );
    });
});

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Вы пробовали использовать функцию jquery abort ()?

заключил в кавычки "вызов .abort () для объекта остановит запрос до его завершения."

http://api.jquery.com/jQuery.ajax/

1 голос
/ 07 марта 2011

Просмотрите плагин AJAX Manager здесь:

http://plugins.jquery.com/project/AjaxManager

и здесь:

http://www.protofunc.com/scripts/jquery/ajaxManager/

Позволяет кэшировать запросыпредотвращение двойных запросов на один и тот же URL и прерывание запросов, среди прочих возможностей.

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