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

AngularJS中$http.post(...).success不是函数的TypeError问题求助

解决AngularJS中$http.post(...).success is not a function错误

嘿,这个问题我太熟了!你碰到的是AngularJS版本更新带来的兼容性问题——从AngularJS 1.6版本开始,官方就彻底移除了$http服务的.success()和.error()方法,转而使用标准的Promise API:.then()和.catch()。你跟着的教程应该是基于1.5或更早版本写的,所以才会出现这个TypeError。

问题根源

旧版本AngularJS里,$http请求会返回带有.success()/.error()的特殊对象;但1.6+版本里,$http直接返回原生Promise,只能用.then()处理成功响应,.catch()处理错误。

修复步骤

根据你提到的两个文件,分别修改代码:

1. 修改authService.js中的authFactory.login方法

原来的错误写法:

authFactory.login = function(user) {
  return $http.post('/api/login', user)
    .success(function(data) {
      // 你的成功处理逻辑
    })
    .error(function(err) {
      // 你的错误处理逻辑
    });
};

改成Promise风格的正确写法:

authFactory.login = function(user) {
  return $http.post('/api/login', user)
    // 成功响应:response包含data/status/headers等完整响应信息
    .then(function(response) {
      var responseData = response.data;
      // 这里写你的成功处理逻辑,比如保存token到本地存储
      return responseData; // 返回数据给上层控制器使用
    })
    // 错误响应:error包含response等错误详情
    .catch(function(error) {
      var errorMsg = error.response.data;
      // 这里写你的错误处理逻辑,比如记录错误日志
      throw errorMsg; // 抛出错误给控制器处理
    });
};

2. 修改mainCtrl.js中的vm.doLogin方法

原来的错误写法:

vm.doLogin = function() {
  authFactory.login(vm.user)
    .success(function(data) {
      // 登录成功后的操作,比如跳转页面
    })
    .error(function(err) {
      // 登录失败提示,比如显示错误信息
    });
};

改成对应Promise风格:

vm.doLogin = function() {
  authFactory.login(vm.user)
    .then(function(data) {
      // 登录成功后的操作,这里的data就是authFactory返回的responseData
      console.log('登录成功:', data);
      // 示例:跳转到主页
    })
    .catch(function(err) {
      // 登录失败提示,这里的err就是authFactory抛出的errorMsg
      console.error('登录失败:', err);
      // 示例:显示错误弹窗或提示文本
    });
};

额外提示

如果实在想沿用旧的.success()/.error()语法,只能把AngularJS版本降级到1.5.x或更早,但非常不推荐——新版本修复了大量安全漏洞和bug,而且Promise写法更符合现代JS的异步编程规范,也更容易和其他异步操作(比如自定义Promise)结合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:40:26