Подтвердить что ты не робот

Тайм-аут с помощью jQuery.get()

Есть ли способ установить период ожидания в $.get()?

Как я хочу, чтобы мой script предупреждал, что загрузка занимает некоторое время (возможно, из-за загруженного сервера или чего-то еще) Кажется, он нигде не нашел.

4b9b3361

Ответ 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)
        }
    }
});