1

我正在开发一个网站,该网站使用 jQuery 1.8.0 向 Java servlet 发出经典的 ajax 请求(确切地说,是一个 Struts 1 操作)。我应该收到 json,它是用 Jackson 创建的。

大多数时候,一切正常,但有时,Firefox 17 似乎没有收到响应并挂起,直到我使用 Windows 的任务管理器结束其进程。我可以在 Firebug 中看到请求已发送,并且在 OC4J 的日志中我的服务器已被调用并已发送响应,但未收到任何响应。即使超时,jQuery ajax 错误方法也不会被调用,并且 Firefox 会保持完全阻塞。

我尝试在禁用插件的情况下重新启动 Firefox,但仍然是同样的问题。

最奇怪的是,这个问题不会发生,IE 和 Chrome 都没有。

除非被要求,否则我不会发布任何代码,因为我的代码非常经典。

你们中是否有人已经面临这个问题?或者也许有一个线索?

谢谢。

编辑

我的代码是异步的,所以 Firefox 不应该这样挂,我不明白。

代码,如要求:

Javascript

$.ajax({
    type : 'POST',
    url : 'calculate.do?action=career',
    timeout: 40000,
    data : {
    "data": JSON.stringify(obj)
    },
    success: function(json){
        // do stuff with json, like setting some field's values
    },
    error: function(xhr, ajaxOptions, thrownError){
        // error message somewhere in the page
    }
);

支柱动作:

    private static final String A_JSON_STRING = "{\"msg\" : \"success\", "
         + "\"code\" : \"0\"}";

    public ActionForward career(final ActionMapping mapping,
        final ActionForm form, final HttpServletRequest request,
        final HttpServletResponse response) throws Exception {

        PrintWriter writer = null;
        writer = response.getWriter();
        String json = request.getParameter("data");

        // do stuff with json then send a response 

        response.setContentType("application/json");
        writer.write(A_JSON_STRING);

        writer.flush();
        writer.close();

        // struts should return an action forward but as it's an ajax call,
        // there's no need to
        return null;

}

为了清楚起见,我跳过了 try/catch/finally,但它存在于我的代码中。

编辑 2:我最终切换到 Firefox 18(测试版),现在一切似乎都很好......

4

0 回答 0