Тайм-аут с помощью jQuery.get()
Есть ли способ установить период ожидания в $.get()
?
Как я хочу, чтобы мой script предупреждал, что загрузка занимает некоторое время (возможно, из-за загруженного сервера или чего-то еще)
Кажется, он нигде не нашел.
Ответы
Ответ 1
Просто используйте $.ajax(...)
:
$.ajax({
url: url,
success: function(data){
//...
},
timeout: 1000 //in milliseconds
});
Также как указано ниже в комментариях, вы можете использовать .ajaxSetup(...)
для применения таймаута глобально:
$.ajaxSetup({timeout:1000}); //in milliseconds
Ответ 2
$.get
является просто хорошим сокращением для $.ajax
, который имеет параметр timeout
, который укажет, как долго script будет ждать до отмены обратного вызова.
Вы можете переопределить глобальное значение по умолчанию, используя $.ajaxSetup({timeout: 9001})
, что позволит вам продолжать использовать $.get
.
Если вы просто хотите предупредить пользователя без отмены запроса, используйте $.ajax
, установите тайм-аут и отмените таймаут в обратном вызове complete
.
Вот пример кода стартового кода, я его нигде не тестировал, и его, вероятно, можно было бы превратить в плагин с небольшим количеством работы:
(function(){
var t, delay;
delay = 1000;
$('.delay-message').ajaxStart(function () {
var $this;
$this = $(this);
t = setTimeout(function () {
$this.trigger('slowajax');
}, delay);
}).ajaxComplete(function () {
if (t) {
clearTimeout(t);
}
});
}());
$('.delay-message').on('slowajax', function () {
$(this).show().delay(2000).fadeOut(1000);
});
Ответ 3
используйте ajaxSetup
$.ajaxSetup({
timeout:2000 // in milliseconds
});
//your get request here
Ответ 4
Вызвать $.ajax
и передать параметр timeout
.
Ответ 5
Просто используйте .ajax()
для этого; ведь .get()
- это всего лишь обертка вокруг этого. Вы можете сделать что-то вроде:
function doAjax() {
var $warning = $("#warning").hide(), // Always hide to start with
warningTimeoutId = 0;
warningTimeoutId = window.setTimeout(function () {
$warning.show();
}, 10000); // wait 10s before showing warning
$.ajax({
timeout: 30000, // 30s timeout
complete: function () {
// Prevent the warning message from appearing
window.clearTimeout(warningTimeoutId);
}
... // other config
});
}
Здесь вы начинаете таймаут перед вызовом Ajax, который будет показан после 10 секунд, если запрос Ajax уже не закончен.
Ответ 6
Если вы хотите легко отобразить пользовательское сообщение об ошибке при превышении времени ожидания (в противном случае обратный вызов $.get-complete не вызывается), вы можете использовать это:
$.ajaxSetup({
timeout: 1000,
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (textStatus == 'timeout') {
// timeout occured
} else {
// other error occured (see errorThrown variable)
}
}
});