jQuery с помощью метода getjson с таймаутом
при вызове веб-службы yahoo (http://boss.yahooapis.com/ysearch) чтобы вернуть набор данных, можно ли установить тайм-аут и выйти из подпрограммы после ее истечения?
jQuery.getJSON("http://boss.yahooapis.com/ysearch/...etc",
function (data) {
//result set here
});
4 ответов
вы можете использовать опцию timeout
http://api.jquery.com/jQuery.ajax/
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
timeout: 3000 //3 second timeout
});
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
timeout: 3000 //3 second timeout,
error: function(jqXHR, status, errorThrown){ //the status returned will be "timeout"
//do something
}
});
function testAjax() {
var params = "test=123";
var isneedtoKillAjax = true; // set this true
// Fire the checkajaxkill method after 10 seonds
setTimeout(function() {
checkajaxkill();
}, 10000); // 10 seconds
// For testing purpose set the sleep for 12 seconds in php page
var myAjaxCall = jQuery.getJSON('index2.php', params, function(data, textStatus){
isneedtoKillAjax = false; // set to false
// Do your actions based on result (data OR textStatus)
});
function checkajaxkill(){
// Check isneedtoKillAjax is true or false,
// if true abort the getJsonRequest
if(isneedtoKillAjax){
myAjaxCall.abort();
alert('killing the ajax call');
}else{
alert('no need to kill ajax');
}
}
}
вариант тайм-аута, предложенный Галеном, является лучшим способом. Если вам нужен альтернативный метод, вы можете записать время, когда запрос был инициирован, и в обратном вызове сравнить его с текущим временем. Игнорируйте результат, если прошло определенное количество времени. Конечно, это не отменит запрос.