【问题标题】:Ajax request - timeout error/warningAjax 请求 - 超时错误/警告
【发布时间】:2012-08-28 21:39:15
【问题描述】:

我有这个功能,而且大部分时间都可以正常工作,但是如果发生异常情况,客户端将不知道为什么加载 gif 总是显示。

我想知道我是否可以定义 20 秒超时,如果 ajax 请求不成功,加载 gif 会消失并显示类似“连接丢失”或类似的错误:

function ajaxrequest(){
                var params = [];
                for (var i=0; i < submit.length; i++) {
                    var ele = submit[i];
                    params[i] = ele + '=' + $('#' + ele).attr('value');
                }
                params = params.join('&');
                $(".agendarleft").html("<center><img src='skins/{VAL_SKIN}/styleImages/iloading.gif'></center>");
                $.ajax({
                type: "GET",
                url: "ajaxload/como.php",
                data: params,
                success: function() {
                $(".agendarleft").html("<center><div style='height:50px'><h2>Enviado! Seremos breves na resposta.</h2></div></center><br/><img src='../skins/Sandbox_Light/styleImages/after1.jpg'/></center>");
                }
                });
            }

【问题讨论】:

    标签: jquery ajax timeout


    【解决方案1】:

    请在此处查看超时参数

    http://api.jquery.com/jQuery.ajax/

    演示:http://jsfiddle.net/u3f9C/183/

    如果您将超时更改为 1000,您将看到错误。现在它应该显示超时,因为超时值非常低,甚至在它尝试连接到 url 之前它就超时了。

    【讨论】:

    • error参数如何处理?什么时候发生?我应该使用“超时”还是“错误”?
    • 在上面的示例中,无论请求失败的原因(500 或其他),微调器都会无休止地旋转。如果是这种情况,这实际上不是超时问题,而是一般的错误处理问题,正如我在回答中提到的那样。如果您的服务器没有响应,并且您想在一段时间后手动使请求超时,那么 Sones Dabhi 的回答是完全正确的。
    • 超时设置只是告诉它您希望超时多长时间。然后您将在错误回调中处理超时,因此您将同时使用两者。
    • 至于微调器,在设置ajax调用时使用完整回调隐藏微调器,因为它总是被调用。
    【解决方案2】:

    您可以设置错误回调,如下所示:

    $.ajax({}).error(function(){ // remove spinner or do something else });
    

    见:http://api.jquery.com/jQuery.ajax/

    或者按照您上述要求的风格:

    $.ajax({error: function() {}, success: function() {} });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2017-07-24
      相关资源
      最近更新 更多