从ajax请求修改全局变量

时间:2017-07-11 18:59:31

标签: javascript json

我知道这已被无数次询问,但我无法弄清楚问题。据我所知,你可以在javascript中修改函数内的全局变量。它对我不起作用。

var lastMessage = 0;
function loadChat() {
$.post("/lastmessage", { roomid: roomId })
    .done(function(data) {
        var response = JSON.parse(data);
        if (response.state == "success") {
            lastMessage = response.message;
            console.log("Inside: " + lastMessage);
        }
    });
}

console.log("Outside: " + lastMessage);

这给了我

Outside: 0
Inside: 17

内部值正确,外部不正确。问题可能是什么?

1 个答案:

答案 0 :(得分:3)

它是异步的,因此当你从外面调用它时,它还没有完成执行。这意味着只有在帖子完成后才会到达代码的这一部分

.done(function(data) {
        var response = JSON.parse(data);
        if (response.state == "success") {
            lastMessage = response.message;
            console.log("Inside: " + lastMessage);
        }
    });

但是console.log("Outside: " + lastMessage);将继续执行而不等待,因为post是异步的。

如果您想在检索值后发生某些事情,可以选择使用回调函数,例如:

function printMessage(message) {
    console.log(message)
}

function loadChat(callback) {
$.post("/lastmessage", { roomid: roomId })
    .done(function(data) {
        var response = JSON.parse(data);
        if (response.state == "success") {
            lastMessage = response.message;
            callback(lastMessage);
        }
    });
}

loadChat(printMessage);