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

Setting the Results of a jQuery Ajax Request to a Global Variable

本文关键字:设置 全局变量 结果 jQuery Ajax 请求      更新时间:2023-09-26

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

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

如果你需要代码来理解我的问题,上面的代码不工作。我想找一个

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

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