Установить тайм-аут для ajax (jQuery)

$.ajax({
    url: "test.html",
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

иногда

4 ответов


пожалуйста, читайте $.ajax документация, это тема.

$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

вы можете увидеть, какой тип ошибки был брошен при доступе к параметру textStatus . Параметры: "timeout", "error", "abort"и " parsererror".


вот некоторые примеры, которые демонстрируют, установка и обнаружение тайм-ауты в старом в jQuery и новые paradigmes.

Live Demo

обещание с jQuery 1.8+

Promise.resolve(
  $.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
  })
).then(function(){
  //do something
}).catch(function(e) {
  if(e.statusText == 'timeout')
  {     
    alert('Native Promise: Failed from timeout'); 
    //do something. Try again perhaps?
  }
});

jQuery 1.8+

$.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
}).done(function(){
    //do something
}).fail(function(jqXHR, textStatus){
    if(textStatus === 'timeout')
    {     
        alert('Failed from timeout'); 
        //do something. Try again perhaps?
    }
});​

jQuery

$.ajax({
    url: '/getData',
    error: function(jqXHR, textStatus){
        if(textStatus === 'timeout')
        {     
             alert('Failed from timeout');         
            //do something. Try again perhaps?
        }
    },
    success: function(){
        //do something
    },
    timeout:3000 //3 second timeout
});

заметил, что textStatus param (или jqXHR.statustext также) позволит вам знайте, в чем была ошибка. Это может быть полезно, если вы хотите знать, что сбой был вызван таймаутом.

ошибка(jqXHR, textStatus, errorThrown)

функция, вызываемая, если запрос не выполняется. Функция получает три аргумента: jqXHR (в jQuery 1.4.X, XMLHttpRequest) объект, строка, описывающая тип произошла ошибка и необязательный объект исключения, если таковой произошел. Возможные значения для второго аргумент (кроме null) - " timeout", "ошибка", "отмена" и "parsererror". При возникновении ошибки HTTP , errorThrown получает текстовую часть состояния HTTP, например "Не найдено "или" внутренняя ошибка сервера."По состоянию на jQuery 1.5, ошибка настройка может принимать массив функций. Каждая функция будет вызываться попеременно. Примечание: этот обработчик не вызывается для междоменного сценария и Запросов JSONP в.

src: http://api.jquery.com/jQuery.ajax/


можно использовать timeout настройка параметров ajax следующим образом:

$.ajax({
    url: "test.html",
    timeout: 3000,
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

Читайте все о параметрах ajax здесь:http://api.jquery.com/jQuery.ajax/

помните, что когда происходит тайм-аут,error обработчик запускается, а не success обработчик :)


используйте полнофункциональный .ajax функции jQuery. сравните сhttps://stackoverflow.com/a/3543713/1689451 для примера.

без тестирования просто объедините свой код с указанным вопросом SO:

target = $(this).attr('data-target');

$.ajax({
    url: $(this).attr('href'),
    type: "GET",
    timeout: 2000,
    success: function(response) { $(target).modal({
        show: true
    }); },
    error: function(x, t, m) {
        if(t==="timeout") {
            alert("got timeout");
        } else {
            alert(t);
        }
    }
});​