使用async获取错误:false

时间:2017-01-24 07:29:10

标签: javascript jquery ajax

我需要将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之外的变量中。

1 个答案:

答案 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