Обработка тайм-аута 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();
});
Ответы
Ответ 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'
});