添加超时加载()

时间:2012-07-20 18:20:59

标签: javascript jquery

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文件,则返回'无法加载'。

4 个答案:

答案 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是您希望它等待的秒数(超时)