ajax调用中的504 GATEWAY_TIMEOUT

时间:2016-10-06 07:21:35

标签: javascript ajax

我有ajax调用,我处理大数据,然后以ajax成功重新加载页面。 Ajax调用是

        $.ajax({
            type:'POST',
            cache:false,
            async:false,
            url: 'URL',
            data: "",
            timeout:0,
            beforeSend:function(msgg){   
                $('#loading').show();
            },
            success: function(data){
                if(data == "success")
                {
                    setTimeout(function(){
                        $('#loading').hide();
                        window.location.reload();
                    },5000);
                }
            }
        });

但它获得504 GATEWAY_TIMEOUT并且ajax调用永远不会成功。我需要手动刷新。

4 个答案:

答案 0 :(得分:0)

当您的API网关URL没有响应时,通常会发生

504 GATEWAY_TIMEOUT个错误。它可能是某种内部网关错误。

以下是一些排除故障的步骤:

  • 使用像Postman这样的代理来发出相同的确切请求并查看响应是什么
  • 确保您的路径正确
  • 如果您对同一网关网址发出其他请求,可能是GET请求,请尝试手动或使用您的代码进行这些调用,以确保网关正常运行
  • 如果您有权访问网关,请重新启动它(如果您有微服务架构和Dockerisation等,这是可能的)

答案 1 :(得分:0)

我认为浏览器不能保持长时间的ajax调用,所以我使用了ajax召回和部分处理数据。它解决了问题。

答案 2 :(得分:0)

建议您拨打更多电话以检查状态/检索数据。

如果无法完成上述操作,则可以选择以下方法:

  

注意:不建议将此解决方案用于生产环境或高流量情况,请确保在隔离的服务器上执行此操作。

如果使用Apache Web Server 2.4,则TimeOut伪指令默认设置为60秒。

有关更多详细信息,请参见this article

无论max_execution_time

,Web服务器将仅保持连接打开60秒。

虽然php.ini中的max_execution_time设置了php的执行时间,但是Apache TimeOut指令设置了最大连接时间。

示例:

  • 如果php max_execution_time 为120秒,而 TimeOut 为30秒-您将收到504错误
  • 如果php max_execution_time 为120秒,而 TimeOut 为300秒-您的脚本将执行最多120秒,但您的连接可以保持300秒的存活时间

如果您未从php设置任何响应代码,则一切正常,PHP返回200,如果发生错误,则返回500。

当您收到意外的HTTP响应代码时,也请密切注意Web服务器。

答案 3 :(得分:0)

找到了#david-hoerster发布的工作解决方案

如他所说,如果您的错误事件处理程序在发生超时时采用三个参数(XMLHttpRequest,textstatus和message),则状态arg将为“超时”

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

使用jsFiddle,您可以测试ajax调用-等待2秒钟后才能响应。我将超时设置为1秒,因此它应该出错,并将'timeout'的文本状态传递回错误处理程序。