3

現在、angularJS と CoffeeScript を使用して投稿リクエストを送信しようとしています。サンプル コードは次のとおりです。

login: (user, callback)=>
baseUrl = 'http://localhost:3000/api/v1/sessions'
@$http({
  method: 'POST',
  url: baseUrl,
  data: user
}).success (result)->
  callback(result)

しかし、私がそれを呼び出すと、POST リクエストの代わりに「OPTIONS」リクエストを送信するだけです。
リクエストの詳細は次のとおりです。 ここに画像の説明を入力 このメソッドにヘッダーを追加すると、

login: (user, callback)=>
baseUrl = 'http://localhost:3000/api/v1/sessions'
@$http({
  method: 'POST',
  url: baseUrl,
  data: user,
  headers:
    'Content-Type': 'application/json'
}).success (result)->
  callback(result)

それでも機能しませんが、ヘッダーを 'Content-Type': 'application/x-www-form-urlencoded'に変更すると、投稿リクエストを送信できます。
しかし、リクエストの Content-type は私が望んでいません。

また、 data: JSON.stringify(user)によってリクエスト データを JSON に変更しようとしました が、まだ機能していません。

アップデート

皆さん、私はこの問題について別のスパイクを行いました。リクエストを送信するのはjqueryで、正常に動作しますが、リクエストデータが異なるという有線のものを見つけました。

Jクエリ

$.ajax({
  type: "POST",
  url: "http://localhost:3000/api/v1/sessions",
  data: {
    "user":{
      "email":"wahxxx@gmail.com",
      "password":"123456"
    }
  },
  success: function(){

  }

Jquery のスクリーンショット ここに画像の説明を入力

角度

login: (user, callback)=>
baseUrl = 'http://localhost:3000/api/v1/sessions'
@$http({
  method: 'POST',
  url: baseUrl,
  data: {
    "user":{
      "email":"wahxxx@gmail.com",
      "password":"123456"
    }
  },
  headers:
    'Content-Type': 'application/x-www-form-urlencoded'
}).success (result)->
  callback(result)

リクエストを送信できるようになりましたが、リクエストを実行しようとすると 401 になりました。
Angular のスクリーンショット ここに画像の説明を入力

そのため、この問題は角度要求データの形式が原因である可能性があると思います。

4

1 に答える 1

1

CORS の制限と同じオリジン ポリシーに達しています。

最も簡単な解決策は、Web フロントエンドと API を 1 つのアプリとして一緒にデプロイすることです。同じマシンでもポートが異なる場合は、同じオリジン ポリシーに対処する必要があります。

オプションはプリフライト クエリです。バックエンドにそれを受け入れさせれば、問題ないはずです。

詳細: http://www.html5rocks.com/en/tutorials/cors/

于 2014-01-28T08:53:33.043 に答える