Есть ли способ установить период ожидания в $.get()
?
Как я хочу, чтобы мой script предупреждал, что загрузка занимает некоторое время (возможно, из-за загруженного сервера или чего-то еще) Кажется, он нигде не нашел.
Есть ли способ установить период ожидания в $.get()
?
Как я хочу, чтобы мой script предупреждал, что загрузка занимает некоторое время (возможно, из-за загруженного сервера или чего-то еще) Кажется, он нигде не нашел.
Просто используйте $.ajax(...)
:
$.ajax({
url: url,
success: function(data){
//...
},
timeout: 1000 //in milliseconds
});
Также как указано ниже в комментариях, вы можете использовать .ajaxSetup(...)
для применения таймаута глобально:
$.ajaxSetup({timeout:1000}); //in milliseconds
$.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);
});
используйте ajaxSetup
$.ajaxSetup({
timeout:2000 // in milliseconds
});
//your get request here
Вызвать $.ajax
и передать параметр timeout
.
Просто используйте .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 уже не закончен.
Если вы хотите легко отобразить пользовательское сообщение об ошибке при превышении времени ожидания (в противном случае обратный вызов $.get-complete не вызывается), вы можете использовать это:
$.ajaxSetup({
timeout: 1000,
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (textStatus == 'timeout') {
// timeout occured
} else {
// other error occured (see errorThrown variable)
}
}
});