Yii2中通过Ajax调用API无法正确提取msim_id字段的问题
解决方法
首先在success回调里添加代码,明确响应数据的实际结构:
success: function (imsi) { console.log('数据类型:', typeof imsi); console.log('对象所有键:', Object.keys(imsi)); console.log('原始响应数据:', imsi); // 后续提取逻辑写在这里 }
根据排查结果对应处理:
情况1:响应是未解析的JSON字符串
如果typeof imsi返回string,说明jQuery没自动解析JSON(大概率是服务器返回的Content-Type不是application/json),手动解析后提取:
const parsedData = JSON.parse(imsi); console.log(parsedData['0'].msim_id); // 赋值到输入框 $('#metertosimmapping-imsi').val(parsedData['0'].msim_id);
情况2:响应是带数字键的对象
如果Object.keys(imsi)返回['0'],说明imsi是一个以字符串'0'为键的对象,直接通过键访问:
console.log(imsi['0'].msim_id); // 或imsi[0].msim_id(数字键会自动转为字符串) $('#metertosimmapping-imsi').val(imsi['0'].msim_id);
情况3:响应被嵌套在顶层属性中
部分服务器会把数据包裹在data/result这类顶层属性里,比如:
// 假设实际结构为 { data: { 0: { msim_id: 'xxx' } } } console.log(imsi.data['0'].msim_id);
额外提示
- 注意控制台的自动展开特性,查看响应的原始输出,确认结构是否和你看到的一致;
- 你的判断代码已排除
imsi是数组的可能,无需再尝试imsi[0]的数组访问方式。
内容的提问来源于stack exchange,提问作者Moeez
相关产品推荐
相关产品推荐

