如何设置$ .ajax请求的超时并重做它,如果它需要太长时间?

Ahm*_*uad 2 javascript ajax jquery

有人可以告诉我一个关于为我的$ .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;
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 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();
            }
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

你可能想要做一些更聪明的事情来避免永久性的电话......

从文档:

设置请求的超时(以毫秒为单位).这将覆盖使用$ .ajaxSetup()设置的任何全局超时.超时时间从$ .ajax调用点开始; 如果其他几个请求正在进行且浏览器没有可用的连接,则请求可能会在发送之前超时.在jQuery 1.4.x及更低版本中,如果请求超时,XMLHttpRequest对象将处于无效状态; 访问任何对象成员可能会抛出异常.仅在Firefox 3.0+中,超时无法取消脚本和JSONP请求; 即使脚本在超时期限后到达,脚本也会运行.