You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript函数调用间全局变量无法保留修改值问题求助

问题原因

这不是全局变量无法保留修改值的问题,核心是$.post是异步网络请求,代码执行顺序和你预想的不一样:

  • 执行get_server_model()时,$.post只会把请求发送给后端,不会阻塞等待后端返回结果,JS会直接继续执行$.post之后的代码,也就是你$(document).ready里后续的$("#demohi").text(...)逻辑,这时候$.post的回调函数还没有被触发,Client_Model还保留初始的空对象值,所以打印为空。
  • 只有当后端接口返回响应后,$.post的回调函数才会执行,此时才会给Client_Model赋值,所以回调内的打印可以拿到正确结果。
解决方案

方案1:把依赖Client_Model的逻辑移入回调

所有需要用到接口返回的Client_Model的代码,都放到$.post的回调函数中执行即可,修改后的示例代码:

var Client_Model = {};

// 页面加载完成后执行
$(document).ready(function() {
    get_server_model();
});

function get_server_model(){
    $.post( "/get_server_model", {
      "cmd": "GET_SERVER_MODEL"
    }, function(resp){
        var response = JSON.parse(resp);
        if (response.error === true)
        {
            alert("Error");
        }
        else
        {
            Client_Model = response.server_model;
            set_page_elements(response.server_model);
            $("#demolow").text(JSON.stringify(Client_Model.graph_lines)); 
            // 原来在ready里的后续逻辑移到这里
            $("#demohi").text(JSON.stringify(Client_Model));
            get_page_elements();
            send_graph_data();
        }
    });
}

方案2:用Promise+async/await优化异步流程

如果不想把所有逻辑都堆在回调里,可以封装异步请求,用同步写法执行异步逻辑:

var Client_Model = {};

// 页面加载完成后执行
$(document).ready(async function() {
    await get_server_model();
    // 等请求执行完成后再执行后续逻辑
    $("#demohi").text(JSON.stringify(Client_Model));
    get_page_elements();
    send_graph_data();
});

function get_server_model(){
    // 返回Promise对象
    return new Promise((resolve, reject) => {
        $.post( "/get_server_model", {
          "cmd": "GET_SERVER_MODEL"
        }, function(resp){
            var response = JSON.parse(resp);
            if (response.error === true)
            {
                alert("Error");
                reject()
            }
            else
            {
                Client_Model = response.server_model;
                set_page_elements(response.server_model);
                $("#demolow").text(JSON.stringify(Client_Model.graph_lines));
                resolve()
            }
        });
    })
}

内容的提问来源于stack exchange,提问作者johnnyX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:39:02