我正在开发一个网站,它将使用jQuery 1.8.0的经典ajax请求发送到Java servlet(精确地称为Struts 1操作)。我应该收到杰克逊创建的json。
大多数情况下,一切都很正常,但有时候,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
}
);
Struts行动:
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(测试版),现在看来还不错......