You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换AngularJS版本后代码失效问题求助

解决AngularJS版本切换后$http代码失效的问题

嘿,我猜你大概率是升级到了AngularJS 1.4及以上的版本吧?这问题我之前也碰到过——新版本里直接移除了$http.success()和$http.error()这两个老方法,换成了符合Promise标准的then()和catch()语法,这就是代码失效的核心原因。

核心修改点

  • 把success()替换成then(),回调函数的参数会变成一个完整的响应对象,你需要通过response.data来获取原来的返回数据
  • 把error()替换成catch(),用来处理请求失败的情况
  • 如果是升级到1.6+,更推荐用模块化的方式注册控制器,而不是全局函数(虽然全局函数暂时还能跑,但不符合规范)

修改后的完整代码

angular.module('list', [])
// 推荐用.controller方法注册控制器,替代全局函数
.controller('ListCtrl', function($scope, $http) {
  $http({
    method: 'GET',
    url: 'json_price_1.json'
  }).then(function(response) {
    // 从响应对象中取出数据
    var data = response.data;
    $scope.artists = data.artists;
    $scope.albums = [];
    
    // 保留你原来的遍历逻辑
    angular.forEach(data.artists, function(artist) {
      angular.forEach(artist.albums, function(album){
        $scope.albums.push(album); // 补全你没写完的push操作
      });
    });
  }).catch(function(error) {
    // 这里可以添加错误处理逻辑,比如打印日志或者提示用户
    console.error('加载数据失败:', error);
  });
});

额外提醒

如果你的项目还在用全局函数注册控制器(像原来的function ListCtrl(...)),在新版本的AngularJS里可能会遇到严格模式下的报错,或者模块化打包时的问题,所以尽量改成.controller()的注册方式更稳妥。

内容的提问来源于stack exchange,提问作者user2866865

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:16:47