1

我正在尝试对服务器进行 HTTP POST。

我必须发送的数据是一个 json 对象。

问题是角度中的 $http.post 使用选项覆盖了该方法。

我可以做这个配置

.config(['$httpProvider', function ($httpProvider) {
  //Reset headers to avoid OPTIONS request (aka preflight)
  $httpProvider.defaults.headers.common = {};
  $httpProvider.defaults.headers.post = {};
  $httpProvider.defaults.headers.put = {};
  $httpProvider.defaults.headers.patch = {};
}])

并从选项更改为 POST,但我无法将内容类型设置为“应用程序/json”,并且我收到“415 不支持的媒体类型”

谢谢

4

2 回答 2

6

angular 中的 $http.post 不会使用 OPTIONS 覆盖该方法。您似乎试图在与您的 JS 代码所来自的域不同的域中调用 api。这称为跨域。对于这种情况,浏览器使用 OPTIONS 执行预检请求以查看返回的标头。例如,在您的后端响应中,您应该添加标头Access-Control-Allow-Origin: *。当浏览器看到该标头时,他会执行实际的 POST 请求。

更多细节在这里:https ://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

希望这会有所帮助!

于 2014-03-13T08:15:46.730 回答
1

添加

$httpProvider.defaults.headers.post['Content-Type'] = 'application/json';

但请注意,这将全局设置 Content-Type 标头。

如果您需要设置每次调用的内容类型,您应该使用$http.postlike

 $http.post("/foo/bar", requestData, {
        headers: { 'Content-Type': 'application/json'},
        transformRequest: transform
    }).success(function(responseData) {
        //do stuff with response
    });
于 2014-03-13T08:05:25.790 回答