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

Обработка тайм-аута getJSON

Я использую функцию jQuery getJSON(). Эта функция получает данные без проблем. Но иногда ждут, жду ожидания... И моя загрузочная панель, показывающая загрузку загружаемого груза в центр страницы.  Таким образом, функция jQuery ajax() имеет переменную тайм-аута. Но я хочу использовать функцию getJSON. И я думаю, что я могу использовать функции ajaxStart() и ajaxStop(). Но как?

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
        setTimeout("throw '';",15000) //i used this but didn't work
        setTimeout("return;",15000) //i used this but didn't work
        setTimeout("abort();",15000) //i used this but didn't work.(Abort all ajax events)
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });
4b9b3361

Ответ 1

getJSON() возвращает обещание, по которому вы можете вызвать функцию abort:

var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);

РЕДАКТИРОВАТЬ:, но если ваша цель - просто прервать, если потребуется слишком много времени, тогда ответ на смертельную гитару лучше.

Ответ 2

getJSON() является лишь сокращением для следующего:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

Итак, вы можете использовать $.ajax() и указать опцию timeout по желанию. См. Также: http://api.jquery.com/jQuery.getJSON/

Ответ 3

Как упомянутая getJSON() функция смертельной гитары - это всего лишь сокращение для $.ajax(). Если вы хотите определить, произошло ли время ожидания, а не фактическая ошибка, используйте код ниже.

var request = $.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: function( ) { },
    timeout: 2000
}).fail( function( xhr, status ) {
    if( status == "timeout" ) {
        // do stuff in case of timeout
    }
});

Ответ 4

Там всегда есть и ядерный путь:

//Set AJAX timeout to 10 seconds
$.ajaxSetup({
  timeout: 10*1000
});

Это установит все запросы AJAX, которые ваша программа делает (даже через $.getJSON), чтобы иметь время из 10 секунд (или что у вас есть).

Ответ 5

функция setTimeout выполняет набор кода после заданного количества milisecons в глобальной области.

Функция getJSON (в документации по jQuery здесь http://api.jquery.com/jQuery.getJSON/) является сокращением для:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

поэтому вы хотите сделать свой вызов так:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success,
  timeout: 15000
});

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });

Ответ 6

Я не думаю, что любой из этих ответов идеален. Я знаю, что это уже много лет, но то, что вы хотите сделать, это использовать параметры обратного вызова успеха/ошибки метода .ajax(); при получении ответа JSONP.

Пример того, как я буду структурировать это:

    // Call
    $.ajax({

      // URL you want to get
      url: 'http://example.com/json?callback=?',

      // Set a realistic time in milliseconds
      timeout: 3000,

      // Put in success callback function here, this example
      // shows you the data you got back from the call
      success: function(data) {
        console.log(data);
      },

      // Put in an error handling function, just an alert in this case
      error: function(badData) {
        alert('The call was unsuccessful');
      },

      type: 'POST'
    });