【问题标题】:AngularJS $http.postAngularJS $http.post
【发布时间】:2015-11-12 14:08:10
【问题描述】:

我正在尝试执行 $http.post 并获得响应,我尝试了多种方式,但无法使其正常工作。 我发送的数据(userData)是一个 json 对象。

 $http.post(url, userData)
    .success(function(data, status, headers, config) {
        console.log('post success');
        console.log('data');
        console.log(data);
        console.log('status');
        console.log(status);
        console.log('headers');
        console.log(headers);
        console.log('config');
        console.log(config);
    }).error(function(data, status, headers, config) {
        console.log('post error');
        console.log('data');
        console.log(data);
        console.log('status');
        console.log(status);
        console.log('headers');
        console.log(headers);
        console.log('config');
        console.log(config);
    });

我的状态为 404。

谢谢

【问题讨论】:

  • 表示请求的 URL 不存在。向我们提供更多信息,以便我们为您提供帮助。
  • 我确定该 URL 存在。我打错了这样的电话 $http({ method: 'POST', url: 'url', data: userData, headers: {'Content-Type': 'application/x-www-form-urlencoded' } }) .success(function(data) { console.log('post success'); console.log('data'); console.log(data); }).error(function(data) { console.log ('发布错误'); console.log('data'); console.log(data); }); 和错误不同的是不是404,是415 Unsupported Media Type,这是正确的,因为userData应该是json。
  • 如果没有更多代码,我无法为您提供任何有用的帮助。 URL 不支持 POST 方法或来自服务器的一些奇怪响应。
  • 用firebug调试我意识到控制台中的错误(当我显示状态时)是404,但在.Net中是另一个错误,405 Method Not Allowed。我正在运行一个带有 nodejs(带有 express 和 cors)的服务器,调用一个外部 http 服务。
  • 您可能正试图通过 POST 请求访问 GET 服务。尝试将 $http.post 更改为 $http.get

标签: angularjs angular-http


【解决方案1】:

“405 Method not allowed”响应是因为您的浏览器正在通过 angular $http 执行“preflight” OPTIONS 方法请求,而您的服务器不支持它。启用 CORS 有许多先决条件响应。如果您有权访问服务器,则可以添加对它的支持。一种选择是使用 nginx 作为具有这种配置的前端代理:

http://enable-cors.org/server_nginx.html

阅读 cmets ——它们的内容非常丰富。

另外:请参阅此处的“预检请求”:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

【讨论】:

  • 非常感谢@Brian。服务器不支持CORS,但我会尝试弄清楚如何使用nginx。
【解决方案2】:

404 表示您发送请求的 URL 不存在。

如果您使用像 mysite.com/angular-site 这样的子目录,并且在此处将 URL 设置为像“/url/to/api”这样的相对路径 - 您将获得“mysite.com/url/to/path”而不是正确的“mysite.com/angular-site/url/to/path”。

所以要注意,这可能是问题所在。

【讨论】:

  • 我意识到,听者的属性在有效时和无效时是不同的。我正在尝试用 angularjs 来改变它。
猜你喜欢
  • 1970-01-01
  • 2014-07-04
  • 2017-07-02
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多