AngularJS中Ajax请求无法获取JSON数据,报SCRIPT438错误
解决AngularJS中
$http.success()报错问题 没问题,我来帮你搞定这个请求失败的问题!
问题回顾
你有一个todo.json文件,内容如下:
[{"action":"Buy Flowers", "done":false}, {"action":"Get Shoes", "done":false}, {"action":"Collect Tickets", "done":true}, {"action":"Call Joe", "done":false}]
使用的AngularJS脚本代码:
var model = {user: "Adam"}; var todoApp = angular.module("todoApp",[]); todoApp.run(function($http){ $http.get("todo.json").success(function(data){ model.items = data; }); });
所有文件(JSON、HTML、脚本)都在同一目录,但Edge浏览器控制台抛出了错误:
SCRIPT438: Object doesn't support property or method 'success' todo.html (11,12)
导致无法正常获取JSON数据。
问题根源
这个错误是AngularJS版本更新带来的兼容性问题:从AngularJS 1.6版本开始,官方废弃了$http服务的success()和error()方法,转而使用标准的Promise API(then()和catch())来处理请求结果。旧方法被移除后,浏览器自然会报“对象不支持该属性或方法”的错误。
修复方案
把success()替换成then()即可,注意then()的回调函数接收的是一个完整的响应对象,需要通过response.data来获取返回的JSON数据。同时建议添加catch()来处理请求失败的情况,修改后的代码如下:
var model = {user: "Adam"}; var todoApp = angular.module("todoApp",[]); todoApp.run(function($http){ $http.get("todo.json") .then(function(response){ // 从响应对象中提取实际的JSON数据 model.items = response.data; }) .catch(function(error){ // 可选:添加错误处理逻辑,方便排查问题 console.error('加载todo数据失败:', error); }); });
额外提示
- 版本确认:检查你的AngularJS版本是否为1.6+,如果是旧版本虽然
success()还能用,但建议升级到稳定版以获得更好的兼容性和安全补丁。 - 本地访问限制:如果直接双击HTML文件打开(
file://协议),部分浏览器会限制AJAX请求,建议用本地服务器运行项目,比如Node.js的http-server工具,通过http://localhost访问就能避免这个问题。
内容的提问来源于stack exchange,提问作者GlobalJim
相关产品推荐
相关产品推荐

