我知道这已被无数次询问,但我无法弄清楚问题。据我所知,你可以在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
内部值正确,外部不正确。问题可能是什么?
答案 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);