jquery ajax with async false挂起firefox
我有一个代码调用$ .ajax像这样:
$.ajax({ type: "POST", url: "/sandbox/graphloader/mock3", async: false, data: {calInput1:dates[0], calInput2:dates[1]}, success: function(data){ data=eval(data); for(var x in data[0]){ //alert(data[0][x]); //fill columns here; } fillPercents(column); }});
现在,这适用于所有浏览器,而不是Firefox。 firebug显示它正在收到来自post的回复,但是对于某些未知错误,它没有显示数据。 可能是什么问题?
此行为是设计使然。
永远不要使用async: false
。
由于Javascript在UI线程上运行,因此async: false
请求将冻结浏览器,直到服务器回复。
它是冻结的,因为它没有得到“成功”响应,你没有处理错误。 在您的设置中设置error: function(jqXHR, textStatus, errorThrown){}
以处理错误响应。 async: false
工作正常。
您的全局columns
可能会被先前的AJAX请求覆盖。
尝试将其作为回调中的局部变量,并尝试添加console.log
调用以确保回调顺序符合您的预期。
您可能需要保留全局请求计数器,以确保在发送新请求后不处理响应。
例如:
var lastRequest = 0; //You may want to put this in a namespace or closure ... var thisRequest = ++lastRequest; $.ajax({ type: "POST", url: "/sandbox/graphloader/mock3", async: false, data: {calInput1:dates[0], calInput2:dates[1]}, success: function(data){ if (thisRequest !== lastRequest) return; ... }});
不要在循环体内执行此操作,或者您将共享thisRequest
变量。
相反,从循环体调用函数。