var refreshId_hxlatestposts = setInterval(function() {
var el = $("#hxlatestposts");
var req = $.get("example.php");
el.fadeOut('slow', function () {
req.done(function( data ){
el.html(data).fadeIn('slow');
});
});
}, 60000);
这是我每分钟用来刷新一个div的东西,有时它会在它获取Feed的网站停止时挂断。我想知道如何超时,如果它无法在X秒内加载php文件,则返回'无法加载'。
答案 0 :(得分:2)
很好地使用延迟对象。
如果将$.get
替换为$.ajax
,则可以添加超时。
var req = $.ajax({
url: "example.php",
type: "GET",
timeout: 5000 // 5 seconds
});
然后添加失败处理程序
req.done(function(){...}).fail(function(){
alert("failed to load");
});
答案 1 :(得分:2)
jQuery文档(.ajaxSetup())建议使用.ajaxSetup()
设置timeout
的值,而不是在单个请求中使用它。
如果请求失败,您可以使用request.fail()
注册函数。
$.ajaxSetup({
timeout: 5000
});
var refreshId_hxlatestposts = setInterval(function() {
var el = $("#hxlatestposts");
var req = $.get("example.php");
el.fadeOut('slow', function() {
req.done(function(data) {
el.html(data).fadeIn('slow');
});
req.fail(function(jqXHR, textStatus) {
el.html('Fail to load').fadeIn('slow');
});
});
}, 60000);
答案 2 :(得分:1)
您需要检查传入响应的状态,以确保服务返回200 Ok状态。这比等待超时更可靠 - 你会知道它是否是好数据,可以决定通过将超时置于完整函数中来重试。
$.ajax({
//...
success: function(data, textStatus, xhr) {
console.log(xhr.status);
//handle status codes etc.
// then set your timeout
},
complete: function(xhr, textStatus) {
console.log(xhr.status);
//handle status codes etc.
// then set your timeout
},
// OR
fail: function( xhr, textStatus ){
//retry code or timeout
}
});
答案 3 :(得分:1)
jQuery的$ .get只是$ .ajax的简写,当需要更大的灵活性时使用(在你的情况下,是的)
将$.get("example.php");
替换为:
$.ajax({
type: "GET",
url: "example.php",
timeout: X*1000,
}).done(function(data) {
el.fadeOut('slow', function () {
el.html(data).fadeIn('slow');
});
}, 60000);
});
其中X
是您希望它等待的秒数(超时)