AJAX 响应丢失 后台代码运行完毕,前台没反应 在线等

又一个ajax请求 前台发送请求,后台代码全部运行完了,前台没反应,还在等, 过几分钟之后走error方法, 报504超时

这个ajax的后台请求, 有两种情况, 根据参数,有一种是1秒钟就完事的, 这样的情况下, 前台正常响应,
但是另一种情况下, 需要1分钟才能运行完代码, 这种情况下, 前台就没反应了, 一直在等待响应

但是同样的代码, 在我本地测试都好用, 在另一个服务器也好用, 但是在第三台服务器就不能用,每次都504 这台服务器用的nginx连接,但是nginx的超时我也设置了

上代码

    function doRank(isAsync,isRank){
        if (isRank != false) {
            isRank = true;
        }
        //加载评级信息
        var baseId = $("#baseId").val();
        var doRankUrl = "<%=path%>/domesticEntry.gl?method=getRatings&baseId="+baseId+"&isRank="+isRank;

        doRankAjax = $.ajax({
            async: isAsync,
            type: "post",//请求类型
            url: doRankUrl,
            dataType: "json", //返回的数据类型
            success:function(result,status){
                var systemRankHtml = result.domesticRating.systemRatingLevel;
                //一堆代码
                $('#waitDoRank').modal('hide');
            },
            error:function(){
                if (isStop) {
                    isStop = false;
                    doRank(false,false); //调用此方法
                } else {
                    showMsgForLoad("failure", "系统评级信息");
                }
                $('#waitDoRank').modal('hide');
            }
        });
    }

后台代码

public ModelAndView getRatings(HttpServletRequest request, HttpServletResponse response) throws Exception {
    System.out.println("DRInfoEnteringAction.getRatings()-------------");
    try {
//一大堆代码
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(json.toString());
        response.getWriter().flush();
        response.getWriter().close();
    }catch (Exception e) {
        e.printStackTrace();
        throw e;
    }
    return null;
}

async:false 设置为同步试试.

设置一下timeout属性的时间
$.ajax({
url:XXXX,
timeout:4000,
data:,
type:'post',
success:function(data){
}.
error:。。。。
})

504明显是服务器内部错误,肯定是后台代码有错或者是服务器配置错误!

应该是后台程序异常了

你注解加没加,@responsebody

504错误 是不是返回内容长度问题?

情况一:由于nginx默认的fastcgi进程响应缓冲区太小造成
这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504 Gateway Time-out”错误。
情况一解决办法:
在上述方法修改后,如果还是出现问题,我们可以继续修改nginx的超时参数,将参数调大一点,如设置为60秒:
send_timeout 60;
经过这两个参数的调整,结果没有再提示“504 Gateway Time-out”错误,说明效果还是挺不错的,问题基本解决。
情况二:PHP环境的配置问题
这里我们需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。

情况二解决办法( php-fpm配置修改):
将max_children由之前的10改为30,这样操作是为了保证有充足的php-cgi进程可以被使用。
将request_terminate_timeout由之前的0秒改成60秒,这样使php-cgi进程处理脚本的超时时间提高到60秒,可以防止进程被挂起以提高利用效率。

情况二解决办法(nginx配置修改):
为了减少fastcgi的请求次数,尽量维持buffers不变,我们要更改nginx的几个配置项,如下:
将fastcgi_buffers由4 64k改为2 256k;
将fastcgi_buffer_size 由64k改为128k;
将fastcgi_busy_buffers_size由128k改为256k;
将fastcgi_temp_file_write_size由128k改成256k。

检查是否加入@responsebody,
ModelAndView 改为void 不要有返回值,