【问题标题】:Is it possible to check timeout on jQuery.post()?是否可以在 jQuery.post() 上检查超时?
【发布时间】:2011-05-04 09:23:13
【问题描述】:

我有这段代码从 mysql DB 请求一些文件夹信息:

function gotoDir(pmcat_id, pcat_id){
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">');
    $.post("/publish/includes/content.includes/functions.slideshow.php", 
        {  updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id },
        function(data){
             $('#pageSlideshow').html(data.content);
        }, "json"
    );
}

有时,由于互联网连接不良,发布请求会超时。是否可以在 $.post() 上设置超时检查?例如:如果 $.post() 使用超过 X 毫秒,则重新加载请求。

更新:看起来我找到了解决方案:

function gotoDir(pmcat_id, pcat_id){
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">');
    $.ajax({
        type:"post",
        url:"/publish/includes/content.includes/functions.slideshow.php",
        data: { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id },
        dataType: "json",
        success:function(data) {
            if (data == null){
            alert('ajax failed. reloading...');
            gotoDir(pmcat_id, pcat_id);
        } else {
            $('#pageSlideshow').html(data.content);
        }
        }        
    });
}

这是一种可行的方法吗? :S

【问题讨论】:

  • 不,这不行,因为如果数据 var 等于 null 并不意味着请求已超时,如果 functions.slideshow.php 实际上返回 null,这将导致无限请求!跨度>

标签: ajax jquery timeout


【解决方案1】:

$.ajax 具有完成所需的所有功能:

function gotoDir(pmcat_id, pcat_id) {
    $('#slideshowContainer').html('<img class="loader" src="/javascript/ajax-loader.gif">');
    $.ajax({
        type: "POST",
        url: "/publish/includes/content.includes/functions.slideshow.php",
        data: { updateSlideshowDir: 1, pmcat_id: pmcat_id, pcat_id: pcat_id },
        dataType: "json",
        timeout: 500, // in milliseconds
        success: function(data) {
            // process data here
        },
        error: function(request, status, err) {
            if(status == "timeout") {
                gotoDir(pmcat_id, pcat_id);
            }
        }
    });
}

请注意,你不需要设置timeout选项,除非你想在想要设置的特定时间之后触发错误方法。

【讨论】:

  • 请注意,如果您也将 gotoDir() 设置为成功,这也是长轮询客户端脚本的一个很好的模板:)
【解决方案2】:

您应该使用$.ajax()$.ajaxError(),然后使用“ajaxComplete”可以检查您的请求是timedout,还是succeded

来源:jQuery API

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2018-04-29
    • 2011-03-06
    • 2018-07-28
    • 2017-02-16
    • 1970-01-01
    相关资源
    最近更新 更多