javascript - 修改ajax请求中的全局变量

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

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

最佳答案

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

.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);

关于javascript - 修改ajax请求中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45042582/

相关文章:

javascript - Angular 2 : How to display image to HTML from JSON API

javascript - Chrome 中的 FileReader 内存泄漏

javascript - 根据点击的元素切换多个元素的类

php - 在url中使用哈希时如何获取url参数

Javascript - 动态 div 宽度取决于页面大小

mysql - 将 MySQL JSON 列数组读取为行

javascript - JQuery 是否可以在 ul 元素为空时显示消息并隐藏项目的添加?

javascript - 循环遍历一个json,找到所有具有特定首字母的键并将其放入另一个json中

java - 如何检测是否所有 JSON 字段都被解析?

mysql - MySQL 中的最大 JSON 列长度