又一个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 不要有返回值,