【问题标题】:$http post not working after migration from angularJS 1.3-beta to 1.4从 angularJS 1.3-beta 迁移到 1.4 后,$http 帖子无法正常工作
【发布时间】: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 参数)。如果不发布所有相关功能包括服务器端的东西,您将无法在此处获得解决方案。
  • 你有没有在你的服务器上改变过什么?

标签: javascript jquery angularjs http


【解决方案1】:

根据docs

params - {Object.} - 字符串或对象的映射 将使用 paramSerializer 序列化并附加为 GET 参数。

param 应该是params,因此您的数据没有被序列化,这可以解释为什么服务器拒绝您的 POST(因为 post 可能需要比 GET 更多的权限)。

但即使这样也可能是不正确的,因为我认为params 仅适用于 GET(但也许两者都适用)。

你也不需要 jquery $.param() $http 有一个内置的序列化程序。 data 可以设置为payload

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多