无法通过jQuery getJSON获取本地JSON数据 代码问题排查
错误定位
- 核心问题:
jQuery.getJSON为异步请求,代码未等待JSON加载完成就直接读取StatJSON变量。
代码实际执行流程:发起JSON请求 → 不等待响应返回,直接执行后续markup拼接逻辑 → 此时StatJSON仍为初始的undefined状态 → 读取StatJSON.Phone时直接抛出类型错误,程序中断,根本走不到JSON加载成功的回调逻辑。哪怕JSON路径配置完全正确,也会因为执行时序不对导致无法正常获取数据。 - 次要问题:拼接DOM节点时标签不闭合,原代码每段拼接的div都未写闭合标签,就算成功拿到JSON数据,渲染出的DOM结构也是错乱的。
- 规范问题:原HTML中
id=About的属性值未加引号,虽然浏览器可自动解析,但属于不规范写法。
修正方案
将所有依赖JSON数据的逻辑移到getJSON的成功回调内部,等数据加载完成后再执行拼接、渲染操作,同时修正标签、属性书写错误:
<body> <div id="AboutTab"> <div id="About" class="OuterFlexContainer"> </div> </div> </body> <script> $(document).ready(function(){ $.getJSON("/TrialJSON/JSONData/QueryJSONData.json", function (json) { let markup = ''; markup += '<div>'+ json.Phone.Samsung[0].Size +'</div>'; markup += '<div>'+ json.Phone.Apple[0].Size +'</div>'; $("#About").html(markup); }).fail(function(err){ console.error("JSON加载失败:", err); }); }); </script>
优化说明
- 无需额外定义全局
StatJSON变量,直接使用回调传入的json参数即可,减少全局变量污染 - 新增
fail错误捕获逻辑,避免请求静默失败时无排查线索 - 所有逻辑严格匹配异步执行时序,不存在提前读取未赋值变量的问题
- 规范HTML属性、DOM闭合标签的书写,避免渲染异常
内容的提问来源于stack exchange,提问作者Mithun Uchil
相关产品推荐
相关产品推荐

