AJAX请求返回null触发Cannot read property 'forEach' of null如何解决
问题核心原因
你当前仅对AJAX返回的原始响应data做了非空判断,忽略了两个关键漏洞:
- 后端返回的可能是字符串形式的
"null",而非JS原生的null值,此时data != null判断会返回true(非空字符串和JS原生null判定为不相等),代码会正常进入解析逻辑 - 就算原始响应
data确实不是空值,经过JSON.parse()转换后的结果也可能为null,你没有对转换后的jsonObject做有效性校验,就直接调用了仅数组类型才支持的forEach方法,当jsonObject为null时就会抛出该报错
修复方案
修复核心逻辑是:对JSON解析后的结果做类型校验,确认它是数组后再执行遍历逻辑,避免调用不存在的方法,修复后完整代码如下:
$.ajax({ type: "GET", url: "/search", data: { s: value, }, success: function (data, textStatus, jqXHR) { console.log('data is:', data); if (data != null) { let jsonObject = JSON.parse(data); // 新增解析结果校验逻辑 if (Array.isArray(jsonObject)) { jsonObject.forEach(function (item) { // do stuff }) } else { console.log('返回数据不是预期的数组格式:', jsonObject); } } else { console.log('null data received'); } } })
可选优化
如果该接口确定返回JSON格式,可以直接给$.ajax加上dataType: "json"配置,jQuery会自动完成JSON解析,无需手动调用JSON.parse,简化代码:
$.ajax({ type: "GET", url: "/search", dataType: "json", // 新增该配置项 data: { s: value, }, success: function (jsonObject, textStatus, jqXHR) { console.log('data is:', jsonObject); if (Array.isArray(jsonObject)) { jsonObject.forEach(function (item) { // do stuff }) } else { console.log('返回数据不符合预期:', jsonObject); } } })
内容的提问来源于stack exchange,提问作者Babr
相关产品推荐
相关产品推荐

