it-swarm.com.ru

обработка тайм-аута 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();
    });
19
pheaselegen

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

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

Правка: но если ваша цель просто прервать, если это занимает слишком много времени, то ответ смертельной гитары лучше.

15
Denys Séguret

getJSON() это просто сокращение для следующего:

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

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

15
lethal-guitar

Как упоминалось в смертельной гитаре, функция 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
    }
});
10
Bruno

Всегда есть ядерный маршрут:

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

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

3
Richard

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

Функция 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();
    });
1
renab

Я не думаю, что любой из этих ответов идеален. Я знаю, что это на несколько лет позже, но вы хотите использовать опции обратного вызова success/error метода .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'
    });
0
staypuftman