我正在开发一个网站,该网站使用 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(测试版),现在一切似乎都很好......