有人可以向我展示一个关于为我的$ .ajax请求设置超时的实际示例,并在第一个请求超时的情况下重做整个请求,我已经阅读了文档并且没有得到它。我将不胜感激。
这是我的$ .ajax请求。
$.ajax({
url: '<?php bloginfo('template_directory'); ?>/ajax/product.php',
type: 'get',
data: {product_id : product_id},
beforeSend: function(){
$('#details').html('<div class="loading"></div>');
},
success: function(data){
$('.iosSlider').fadeOut('fast');
thisprod.addClass('current');
$('#details').css({opacity: 0}).html(data).stop().animate({left: 0, opacity: 1}, 800);
}
});
return false;
答案 0 :(得分:6)
ajax函数采用超时参数,您可以在出现错误时检查状态。
var call =function(){
$.ajax({
url: '<?php bloginfo('template_directory'); ?>/ajax/product.php',
type: 'get',
timeout: 400,
...
error: function(x, textStatus, m) {
if (textStatus=="timeout") {
call();
}
}
});
};
你可能想要做一些更智能的事情来避免永久性的电话......
来自文档:
设置请求的超时(以毫秒为单位)。这将覆盖 使用$ .ajaxSetup()设置的任何全局超时。超时时间开始 在$ .ajax调用的点上;如果有其他几个请求 进度和浏览器没有可用的连接,这是可能的 请求在发送之前超时。在jQuery 1.4.x和 如下所示,XMLHttpRequest对象将处于无效状态 请求超时;访问任何对象成员可能会抛出一个 例外。仅在Firefox 3.0+中,脚本和JSONP请求不能 超时取消;即使脚本到达,脚本也会运行 超时期限。
答案 1 :(得分:0)
一个。您可以维护所有请求的队列。
$.xhrQueue = [];
湾将每个请求排入队列
$.ajaxSetup({
beforeSend: function (e, xhr) {
$.xhrQueue .push(xhr);
}
});
℃。完成请求与超时的轮询
setInterval(function(){
$.each($.xhrQueue, function (xhr) {
//check whether status is complete,
//with some try-catch you can know which were the timed-out/not-sent ones
});
}, 1000);
注意:如果不是beforeSend
,您可以通过其他一些函数来尝试进行ajax调用
答案 2 :(得分:0)
对于这种情况,我会使用jquery延迟失败回调。 http://api.jquery.com/deferred.fail/
答案 3 :(得分:-1)
试试这个
var setTime = setTimeOut(function() {
$.ajax({
url: '<?php bloginfo('
template_directory ');?>/ajax/product.php',
type: 'GET',
data: {
'product_id': product_id
}
}).beforeSend(function() {
$('#details').html('<div class="loading"></div>');
}).done(function(data) {
$('.iosSlider').fadeOut('fast');
thisprod.addClass('current');
$('#details').css({
opacity: 0
}).html(data).stop().animate({
left: 0,
opacity: 1
}, 800);
});
}, 2000);