从 angularJS 1.3-beta 迁移到 1.4 后,$http 帖子无法正常工作
Posted
技术标签:
【中文标题】从 angularJS 1.3-beta 迁移到 1.4 后,$http 帖子无法正常工作【英文标题】:$http post not working after migration from angularJS 1.3-beta to 1.4 【发布时间】:2016-01-10 00:38:56 【问题描述】:我正在将我的项目从 angularjs 1.3 beta 迁移到 1.4,'$http get' 工作正常,但 '$http post' 正在产生问题。 以下是在 1.3 中可以正常工作但在 1.4 中无法正常工作的用户身份验证代码
factory.authenticate = function (email, password)
var payload =
email: email,
password: password
;
var rid = Security.reqKey();
payload['rid'] = rid;
return $http(
method: 'POST',
url: Base_url +'service/auth',
param:
rid: rid
,
data: $.param(payload),
headers: 'Content-Type': 'application/x-www-form-urlencoded'
);
;
迁移到 1.4 后会报错:
POST http://localhost/ 405(不允许)XHR 加载失败:POST
(之前工作正常)
在这种情况下,这段代码会给出想要的结果。 如果我将调试器放在 chrome 浏览器中并按 f10 运行整个代码。
【问题讨论】:
什么是Security
,为什么不注入?此外,这个函数 Security.reqKey()
看起来是异步的,这就是为什么在没有调试器的情况下执行代码时它不及时,而在调试时它是准时的 - 这只是几毫秒的问题。
安全不过是一个客户端工厂,其值基于 Date.now().valueOf();我不认为这会造成问题。因为我已经尝试了没有参数参数的这段代码。但它产生了同样的错误。 :(
所以这可能是一个问题,你没有传递参数。无论如何,您的错误是服务器端类型的。你必须先看看问题的根源是什么(尽管我很确定这是因为你没有这个 rid 参数)。如果不发布所有相关功能包括服务器端的东西,您将无法在此处获得解决方案。
你有没有在你的服务器上改变过什么?
【参考方案1】:
根据docs,
params - Object. - 字符串或对象的映射 将使用 paramSerializer 序列化并附加为 GET 参数。
param
应该是params
,因此您的数据没有被序列化,这可以解释为什么服务器拒绝您的 POST(因为 post 可能需要比 GET 更多的权限)。
但即使这样也可能是不正确的,因为我认为params
仅适用于 GET(但也许两者都适用)。
你也不需要 jquery $.param()
$http 有一个内置的序列化程序。 data
可以设置为payload
。
【讨论】:
以上是关于从 angularJS 1.3-beta 迁移到 1.4 后,$http 帖子无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
将 Spring MVC 应用程序从 JSP 迁移到 AngularJS