4
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 的方法,有时当它从中获取提要的网站关闭时它会挂起。我想知道如何超时,所以如果它无法在 X 秒内加载 php 文件,则返回“加载失败”。

4

4 回答 4

2

很好地使用延迟对象。

如果替换$.get$.ajax,则可以添加超时。

var req = $.ajax({
    url: "example.php",
    type: "GET",
    timeout: 5000 // 5 seconds
});

然后添加一个失败处理程序

req.done(function(){...}).fail(function(){ 
    alert("failed to load"); 
});
于 2012-07-20T18:25:59.280 回答
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);
于 2012-07-20T18:32:00.050 回答
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
    }

    });
于 2012-07-20T18:27:50.323 回答
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您希望它等待的秒数在哪里(超时)

于 2012-07-20T18:27:58.963 回答