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

无法从JSON对象获取数据:代码返回undefined但JSFiddle中相似代码正常

问题分析与解决

咱们先揪出你代码里的核心问题——这其实是JavaScript对象属性访问方式的典型误区:

为什么currentIMGArray.IMGid会返回undefined?

当你用点语法(比如obj.property)时,点后面的内容会被当成固定的属性名字面量。你写currentIMGArray.IMGid,JS就会去对象里找一个叫"IMGid"的属性,但你的对象里只有"imgGallery0"、"imgGallery1"这些属性,根本没有"IMGid",所以自然返回undefined。

而你在JSFiddle里的测试代码arr.imgGallery1能正常运行,是因为imgGallery1就是对象实际存在的属性名字面量,和变量无关,点语法在这里是适用的。

正确的写法

要通过变量来动态访问对象属性,必须用方括号语法:

var r = currentIMGArray[IMGid];

这样JS才会读取变量IMGid里存储的内容(也就是"imgGallery0"),然后去对象里匹配对应的属性,就能拿到你想要的值了。

额外的异步风险提醒(虽这次你没碰到,但值得注意)

另外要记住AJAX是异步的:如果用户在AJAX请求还没完成时就点击按钮,currentIMGArray还是初始的空数组,也会引发问题。你可以把点击事件的绑定放在AJAX成功回调里,确保数据加载完成后再允许交互:

success: function (result) {
  currentIMGArray = result[3];
  console.log(currentIMGArray);
  // 数据加载完成后再绑定点击事件
  $("#W").on("click", ".IMG", function() {
    console.log("currentIMGArray: "+currentIMGArray.toString());
    var IMGid = $(this).attr("id");
    console.log("IMGid: "+IMGid);
    var r = currentIMGArray[IMGid];
    console.log("r: "+r);
  })
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:36:05