1

サーバーに対して HTTP POST を実行しようとしています。

送信する必要があるデータは json オブジェクトです。

問題は、angular の $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 に変更しますが、コンテンツ タイプを「application/json」に設定できず、「415 Unsupported Media Type」が表示されます

ありがとうございました

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 ヘッダーがグローバルに設定されることに注意してください。

呼び出しごとに content-type を設定する必要がある場合は、次の$http.postように使用する必要があります

 $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 に答える