$.ajax({
    url: "test.html",
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

有时成功函数很好,有时不行。

如何为这个ajax请求设置超时?例如,3秒,如果时间超时,则显示错误。

问题是,ajax请求冻结块直到完成。如果服务器宕机一段时间,它将永远不会结束。


当前回答

如果你的请求通过NginX,不要忘记检查NginX设置。

Ajax选项。超时是一回事,但nginx请求超时可能也需要调整。

参见https://ubiq.co/tech-blog/increase-request-timeout-nginx/

其他回答

使用全功能的。ajax jQuery函数。 以https://stackoverflow.com/a/3543713/1689451为例进行比较。

无需测试,只需将您的代码与引用的SO问题合并:

target = $(this).attr('data-target');

$.ajax({
    url: $(this).attr('href'),
    type: "GET",
    timeout: 2000,
    success: function(response) { $(target).modal({
        show: true
    }); },
    error: function(x, t, m) {
        if(t==="timeout") {
            alert("got timeout");
        } else {
            alert(t);
        }
    }
});​

你可以像这样在ajax选项中使用超时设置:

$.ajax({
    url: "test.html",
    timeout: 3000,
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

阅读关于ajax的所有选项:http://api.jquery.com/jQuery.ajax/

请记住,当超时发生时,触发的是错误处理程序而不是成功处理程序:)

您的请求应该如下所示。

client.ajax({
               url:'web-url',
               method: 'GET',
               headers: 'header',
               timeout: 3000
          });

请阅读$。Ajax文档,这是一个涉及的主题。

$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

您可以通过访问error: function(jqXHR, textStatus, errorThrown)选项的textStatus参数来查看抛出的错误类型。选项为timeout、error、abort和parsererror。

如果你的请求通过NginX,不要忘记检查NginX设置。

Ajax选项。超时是一回事,但nginx请求超时可能也需要调整。

参见https://ubiq.co/tech-blog/increase-request-timeout-nginx/