此代码停止mousemove事件
$.ajaxSetup({async:false});
$.get(url).success(function(data) { result = data; });
有没有办法避免这种情况,但保留$ .ajaxSetup({async:false});,就像加载函数一样?
由于
加法:
如果我需要
$.ajaxSetup({async:false});
$.get(url).success(function(data) { result = data; });
$.ajaxSetup({async:true});
return result
如何处理?
由于
答案 0 :(得分:6)
return
意味着同步代码流。但是,AJAX是异步的,没有async: false
。这并不意味着您应该使用async: false
。相反,您应该更改代码流以使用回调而不是返回值。
这是必需的,因为无法使异步代码同步(即,您不能将return
与异步函数一起使用)。唯一的方法是自己提供回调:
function get(url, callback) {
$.get(url).success(function(data) { callback(data); });
}
像:
get("...", function(result) {
// use `result` which you normally got by assigning the return value
// of `get` to a variable
});
答案 1 :(得分:5)
你应该找到一种方法来做你想做的事情而不设置async:false
。
使用ajax请求中的回调,您应该可以完成大部分工作。
答案 2 :(得分:3)
async:false
暂停浏览器和所有JavaScript,直到AJAX调用完成。没有办法解决这个问题。
您应该做的是,不应该尝试从AJAX调用中返回值,而应该对回调中的数据进行所有处理。
您可以将返回的数据保存到全局变量中,但在完成之前它将无法使用。