Ajax请求的success回调函数内无法正确映射返回数据如何解决
问题根因
map方法不会修改原数组,仅会返回处理后的新数组,你的代码没有接收该返回值,映射结果自然无法被后续逻辑使用url、text变量在if (module.Topics.length)分支内用var声明,若某个模块的Topics为空数组,最终返回的对象属性会是undefined,存在边界异常- 你直接将原始返回值
data赋值给了vm.items,并没有用到映射后的处理结果
修复代码示例
$.ajax({ url: "https://example.com", type: 'Get', headers: { accept: "application/json;odata=verbose" }, success: function(data) { console.log(data); // 接收map返回的映射结果,可根据业务需求调整赋值的目标变量 vm.processedModules = data.Modules.map(function(module) { // 提前初始化默认值,避免空Topics场景异常 let url = '' let text = '' if (module.Topics.length) { const targetTopic = module.Topics[1] || module.Topics[0] url = targetTopic.Url text = targetTopic.Title } return { url, text } }) // 如果需要将映射结果赋值给vm.items,打开下方注释即可 // vm.items = vm.processedModules }, })
注意事项
- 如果需要直接修改原数组的元素,可以用
forEach方法遍历修改,无需接收返回值 - 建议优先使用
let/const替代var声明变量,避免变量提升带来的意外逻辑异常
内容的提问来源于stack exchange,提问作者Vzupo
相关产品推荐
相关产品推荐

