将jQuery Ajax请求的结果设置为全局变量

时间:2015-06-09 16:03:30

标签: javascript jquery ajax

我正在尝试设置ajax请求的结果,以便在我的代码中全局可用。我最初尝试将请求包装在函数中,返回数据然后将全局变量设置为该函数调用,但它只是作为未定义返回。我不知道如何继续。

var myId = getMyId();

getMyId();
function getMyId(){
    $.ajax({
        url: '/who_am_i',
        method: 'GET',
        dataType: 'json',
        success: function(data) {
            return data;
        }
    });
}
console.log(myId);

如果您需要代码来理解我的问题,上面的代码不起作用。我正试图找到一个

1 个答案:

答案 0 :(得分:1)

var myId;

function getMyId(){
    $.ajax({
        url: '/who_am_i',
        method: 'GET',
        dataType: 'json',
        success: function(data) {
            // you dont return vars from a async callback, from here you can access the global scope like this
            myId = data;
        }
    });
}

getMyId();  // execute it

只有在回调完成后才能使用myId var。因此,调用函数可能会更好,这样您就可以更好地控制执行流程。

var myId;

function getMyId(){
    $.ajax({
        url: '/who_am_i',
        method: 'GET',
        dataType: 'json',
        success: function(data) {
            init(data);
        }
    });
}

function init(data){
    myId = data;
    // do your stuff here to guarantee that myId is populated
}

getMyId();  // execute it

很抱歉这么冗长,但更好:

var myId;

function getMyId(callback){
    $.ajax({
        url: '/who_am_i',
        method: 'GET',
        dataType: 'json',
        success: callback
    });
}

function init(data){
    myId = data;
    // do your stuff here to guarantee that myId is populated
}

getMyId(init);  // execute it

实现相同结果的几种方法应该有助于其他人了解数据如何在异步调用中流动。