Ajax调用(使用jquery)在5分钟后不再得到响应

Ajax call (using jquery) gets no more responses after 5 minutes

本文关键字:不再 响应 5分钟 调用 使用 jquery Ajax      更新时间:2023-09-26

事实上,我有一个JavaScript应用程序(jQuery),它正在向Java函数发送请求,该函数应该向我的ajax函数发回数据(成功案例)
在成功的情况下,我继续我的申请;在出现错误的情况下,我会停止我的过程并向用户显示错误消息。

但是,当Java代码花了5分钟以上的时间向我的Ajax调用发送响应时,这个(Ajax代码)就不再(work/response/goon/)得到任何响应了。。。

我试着将超时限制设置为600000 ms(大约10分钟),但我仍然遇到了同样的问题(没有收到任何错误消息或输出,这可能对我有帮助)。

所以,如果有人知道这个问题的根源,我将不胜感激。

如果可以让它更清晰的话,下面是一些代码:

JSP

$(document).ready(function() {
    /*  performing some layout changes  */
    //
    preValidationDisplay();
}      
function preValidationDisplay() {
    /*  performing some layout changes  */
    setTimeout("getValidationResult()", 500);    
}

function checkReadLogFile() {
    $.ajax({
            url: logFileUrl,
            cache: false,
            success: function(result)
            {                   
                $("#progressBarToResize").width( 
                    '' + parseFloat(result.trim()) + '%' );
            }
        });
}

function getValidationResult() 
{
    var timer = setInterval("checkReadLogFile()", 1000); 

    $.ajax({
        url: '<s:url value="doValidation"/>',
        type: "GET",
        cache: false,
        dataType: "json",
        async: true,
        //timeout : 600000,
        success: function(result, status)
        {
            // Do something
        },
        error: function(jqXHR, status, errorStr){
            // Do something
        }
    });
}

java

@RequestMapping(value = "/doValidation", method = RequestMethod.GET)
public String processValidationResults(HttpServletRequest request, HttpServletResponse response,
        @RequestHeader("Connection") String conn) {
    ValidationResult validationResult = null;
    JSONObject resultJson = new JSONObject();
    HttpSession session = request.getSession();
    JSONObject progressMap = (JSONObject) session.getAttribute("progressMap");
    String uploadedFilePath = progressMap.getString("filePath");
    String realMimeType = progressMap.getString("realMimeType");
    long fileSize = progressMap.getLong("fileSize");
    String ctxPath = request.getContextPath();
    // INVOKE the VALIDATION ENGINE
    try {
        validationResult = validationEngineService.getValidationResult(uploadedFilePath, ctxPath);
        resultJson = JSONObject.fromObject(validationResult);
    } catch (Exception e) {
        validationResult = null;
        resultJson.put("errorMsg", e.toString());
    }
    try {
        response.getWriter().print(resultJson);
        response.flushBuffer();
    } catch (Exception e) {
    }
    return null;
}

当您使用HTTP时,不要期望连接花费超过半分钟的时间。

请使用WebSockets或Comet(长轮询)。

你看,有很多方面可能会决定停止你的连接:

  • web浏览器、防火墙/路由器/isp、web服务器(例如:Apache)、服务器脚本语言(例如:PHP)

我唯一一次在PHP端禁用它是在我希望PHP即使在用户停止连接后也能继续运行时(顺便说一句,我还启用了另一个设置)。

如果没有一些代码,我不确定我是否能帮上什么忙,但你试过检查是哪个事件触发了ajax调用吗?有一次我犯了一个愚蠢的错误,在keydown上发送了一个ajax请求,后来我发现我需要使用keyup而不是keydown,因为一旦文本框的值设置为最近输入的text+键,就会触发keyup事件。因此,您可以在jQuery中尝试设置关键帧或更改事件。如果这是在本地主机上,这不是一个好兆头……首先确定是什么导致了问题,前端还是后端。

要做的事情:1) 更改jQuery 中的事件类型

$("#elem").live("keyup",function() {//send req});

2) 检查apache日志。如果你在ubuntu上或类似的地方,你可以访问/var/log/apache2/error.log