Время ожидания запросов Ajax с jquery? - PullRequest
1 голос
/ 09 октября 2009

Я думаю, что вы можете установить как на post и получить методы в jquery timeout, но мне интересно, есть ли у jquery глобальный таймон, такой же, как у ajax start и stop.

Как я хотел бы установить, чтобы, если, скажем, пост или get или какой-то ajax-запрос выполнялся и выполнялся более X секунд. Появляется всплывающее окно или что-то в этом роде, говорящее, что «сервер работает медленно и время ожидания истекло» и убивает этот запрос.

Тогда пользователь может либо повторить попытку, либо сделать что-то еще.

Есть ли в jquery что-то подобное?

Спасибо

Ответы [ 2 ]

4 голосов
/ 09 октября 2009

Функция jQuery.ajax - это то, что вам нужно. Это дает вам доступ к довольно большому набору параметров для выполнения вызовов AJAX.

В частности, вы хотите сделать звонок, аналогичный

$.ajax({'complete': callbackFunction, 'url': 'foo/bar/', 'timeout': 5000, 'error': errorCallback});

Вам интересны два варианта: timeout и error. Вся документация для функции здесь . Это немного сложнее, чем использование более стандартных функций get / post, но гораздо более гибкий.

Функция error очень похожа на стандартный обратный вызов, который вы используете с любым запросом jQuery AJAX. Если обратный вызов вызывается в случае успешного выполнения запроса, функция ошибки вызывается в случае сбоя (например, 404 ошибки или при превышении времени ожидания). Вы использовали бы функцию ошибки, чтобы отобразить ваше сообщение пользователю, что его запрос истек. Полная документация по аргументам функции (которую, на самом деле, вам, вероятно, не понадобится) доступна на странице документа $ .ajax (ссылка ранее).

В качестве альтернативы , вы можете установить тайм-аут глобально для каждого вызова AJAX с помощью функции jQuery.ajaxSetup. Его аргументы в точности совпадают с аргументами функции jQuery.ajax, поэтому вы должны сделать что-то вроде этого:

$.ajaxSetup({'timeout': 5000, 'error': errorCallback});

Достоинством является то, что вы можете продолжать использовать jQuery.get / jQuery.post, но недостатком является то, что вам нужно проделать дополнительную работу, чтобы сделать вызовы AJAX без тайм-аута.

2 голосов
/ 09 октября 2009

Да, у jQuery есть свойство 'timeout' (в миллисекундах), в которое вы отправляете событие $ .ajax ():

http://www.bennadel.com/blog/1500-Catching-Timeout-Errors-With-jQuery-Powered-AJAX.htm

$.ajax(
        {
            method: "get",
            url: "yourpage.php",
            dataType: "json",
            timeout: (3 * 1000), // 3 seconds

            success: function(){
                //success code here
            },

            error: function( request, strError ){
                //error code here
            }
        }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...