Можно ли проверить таймаут на jQuery.post ()? - PullRequest
9 голосов
/ 03 ноября 2010

У меня есть этот код, запрашивающий некоторую информацию о папке из базы данных mysql:

function gotoDir(pmcat_id, pcat_id){
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">');
    $.post("/publish/includes/content.includes/functions.slideshow.php", 
        {  updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id },
        function(data){
             $('#pageSlideshow').html(data.content);
        }, "json"
    );
}

Иногда почтовый запрос прерывается из-за плохого подключения к Интернету.Можно ли установить проверку тайм-аута на $ .post ()?Пример: если $ .post () использует более X мс, перезагрузите запрос.

ОБНОВЛЕНИЕ: Похоже, я нашел решение:

function gotoDir(pmcat_id, pcat_id){
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">');
    $.ajax({
        type:"post",
        url:"/publish/includes/content.includes/functions.slideshow.php",
        data: { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id },
        dataType: "json",
        success:function(data) {
            if (data == null){
            alert('ajax failed. reloading...');
            gotoDir(pmcat_id, pcat_id);
        } else {
            $('#pageSlideshow').html(data.content);
        }
        }        
    });
}

Это хороший способ сделать это?: S

Ответы [ 2 ]

29 голосов
/ 03 ноября 2010

$. Ajax имеет все функции, необходимые для выполнения того, что вы просите:

function gotoDir(pmcat_id, pcat_id) {
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">');
    $.ajax({
        type: "POST",
        url: "/publish/includes/content.includes/functions.slideshow.php",
        data: { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id },
        dataType: "json",
        timeout: 500, // in milliseconds
        success: function(data) {
            // process data here
        },
        error: function(request, status, err) {
            if(status == "timeout") {
                gotoDir(pmcat_id, pcat_id);
            }
        }
    });
}

Обратите внимание, что вам не нужно устанавливать параметр timeout , если вы не хотите запускать метод ошибки по истечении определенного времени , который вы хотите установить.

3 голосов
/ 03 ноября 2010

Вы должны использовать $.ajax() и $.ajaxError(), затем с помощью «ajaxComplete» вы можете проверить, является ли ваш запрос timedout или succeded.

Источник: jQuery API

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