我需要将ajax
调用之外的一些数据存储在变量中。所以,我在async: false
中使用ajax
选项。但它给了我一个错误:
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.
请参阅下面的代码:
var internal_tags = null;
$.ajax({
async: false,
dataType:'json',
contentType:'application/json',
url: '/ajax-search-suggestions',
type: 'GET',
success: function(data) {
asignVariable(data);
}
});
// get internal tags
function asignVariable(data){
internal_tags = data;
}
我需要将ajax success
数据保存到internal_tags
变量中。如果我删除选项async: false
,则数据不会保存在变量中。那么我如何删除错误或如何将ajax success data
保存在ajax之外的变量中。
答案 0 :(得分:1)
您不应该使用async: true
。您应该重构代码,以便您的函数不返回值,而是进行回调。
不要做的事情示例:
var internal_tags = null;
function getValue() {
$.ajax({
async: false,
dataType:'json',
contentType:'application/json',
url: '/ajax-search-suggestions',
type: 'GET',
success: function(data) {
internal_tags = data;
}
});
}
这是正确的方法:
function getValue(callback) {
$.ajax({
dataType:'json',
contentType:'application/json',
url: '/ajax-search-suggestions',
type: 'GET',
success: function(data) {
callback(data);
}
});
}
所以代替:
var internal_tags = null;
getValue();
alert(internal_tags);
你应该这样做:
getValue(function(internal_tags) {
alert(internal_tags);
});
我还建议您查看jQuery's deferred objects。