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
相关产品推荐
相关产品推荐

