我有一个像这样调用$ .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显示它正在收到来自帖子的回复,但是由于某些未知错误,它没有显示数据。 可能是什么问题?
答案 0 :(得分:10)
此行为是设计使然。
从不使用async: false
由于Javascript在UI线程上运行,async: false
请求将冻结浏览器,直到服务器回复。
答案 1 :(得分:1)
它很冻结,因为它没有得到“成功”响应而你没有处理错误。在您的设置中设置error: function(jqXHR, textStatus, errorThrown){}
以处理错误响应。 async: false
工作正常。
答案 2 :(得分:0)
您的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
变量
相反,从循环体中调用一个函数。