3

これで、AngularJS の Web サービスで$httporを使用して API からデータを取得できます$resourceが、日付を POST または PUT して同じ Web サービスの API を更新することはできません。私が得たエラーはクロスオリジンの問題です:

XMLHttpRequest はhttp://rm.ws.localhost.dev/bookings/36.jsonを読み込めません。オリジンhttp://rm.localhost.devは Access-Control-Allow-Origin で許可されていません。

Angular では、次のようなコードでデータを「GET」できます。

myApp.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

さらに、Web サービス サーバーの構成ファイルを変更し、次の 2 行を追加しました。

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"

これらすべてにより、GET データで Web サービスにアクセスできます。PUT または POST はできません。どこが間違っていたのか、何かが欠けているのか。Angular は POST と PUT をサポートしていると思いました。皆さんありがとう。

4

1 に答える 1

1

私の推測では、API/Web サービス サーバーは OPTIONS リクエストを処理していません。クロスオリジン PUT では常に、ブラウザーが最初に (OPTIONS リクエストを介して) リクエストを「プリフライト」します。単純でないヘッダーを持つクロスオリジン POSTも、この方法でプリフライトされます。サーバーは、OPTIONS 要求への応答で、基になるメソッドと基になる単純でないヘッダー (および Origin) を確認する必要があります。クロスオリジンの PUT と非単純な POST は IE9 以前では機能しないことに注意してください。クロスオリジンの ajax リクエストは、プリフライトをサポートしていないこれらのブラウザーで XDomainRequest を使用して行う必要があるためです。

于 2013-09-20T03:19:39.077 に答える