JavaScript处理PHP AJAX返回JSON报错:jsonData[0]未定义的解决方法
解决「TypeError: jsonData[0] is undefined」的问题
咱们先搞清楚问题出在哪——你的脚本没正确识别AJAX返回的JSON结构,才会触发这个未定义错误。
先拆解返回的数据结构
你拿到的JSON是嵌套结构:真正的城市数据藏在body字段里,而且这个body本身还是一个JSON字符串(不是直接能用的对象)。核心层级是:
AJAX返回的data对象 → body(JSON字符串)→ comuni(城市对象数组)
你现在的代码直接用jsonData[0]去取数据,但解析后的整个jsonData根本没有索引0,你要找的数组其实在jsonData.body.comuni里面。
修正后的脚本
下面是调整后的success回调函数,能正确获取城市数据:
success: function(data) { console.log(data); // 第一步:解析body字段里的JSON字符串,拿到包含城市数组的对象 var bodyData = JSON.parse(data.body); // 第二步:取出comuni数组里的第一个城市对象 var comune = bodyData.comuni[0]; // 加个安全判断,避免comuni数组为空时报错 if (!comune) { console.log("未找到城市数据"); return; } // 现在处理你的判断逻辑(注意:要和字符串"0"比较,不是数字0!) if (comune.datasub !== "0") { $('.nome-comune').html(comune.nomeComune); $('.provincia').html(comune.provincia); $('.data-sub').html(comune.datasub); resultsSub(); } else if (comune.datapresub !== "0" && comune.datasub === "0") { $('.nome-comune').html(comune.nomeComune); $('.provincia').html(comune.provincia); $('.data-presub').html(comune.datapresub); resultsPresub(); } else { $('.nome-comune').html(comune.nomeComune); $('.provincia').html(comune.provincia); noAnpr(); } }
避坑提示
- 字符串vs数字对比:你的
datapresub和datasub都是字符串格式(要么是日期字符串,要么是"0"),所以判断时要用=== "0",别用数字0,否则会出现判断不准的情况。 - 数据解析注意:如果你的AJAX请求设置了
dataType: 'json',那顶层的data已经是解析好的JS对象了——你只需要单独解析data.body这个字符串就行。 - 容错处理:加个
if (!comune)的判断,能避免comuni数组为空或者不存在时再次报错。
内容的提问来源于stack exchange,提问作者Enrico Nry Celone
相关产品推荐
相关产品推荐

