从 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 帖子无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

将条件样式从 jQuery 迁移到 AngularJS

2021-04-19 从angularjs 迁移到vue

将 Spring MVC 应用程序从 JSP 迁移到 AngularJS

在2019年,将网站从Angularjs迁移到另一个框架需要多少钱?

至少努力从 Ionic 迁移到 NativeScript

为什么及如何从Angular迁移到Vue.js?