2013-09-02 19 views
6

私はAngularjs電話のチュートリアルを通して歩き回っており、電話機のJSONをリモートサーバーから取得したいと考えています。Angularjs http.getに失敗しました(しかし、データが返ってきたことがわかります)

$http.get('http://myserver.com/phones.json').success(function(data) { 
    $scope.phones = data; 
}); 

これが原因CORSに失敗した、私はOPTIONSないGETリクエストを送信していましたので、私は、私はOPTIONSないGETことをチャールズに今見ることができるコントローラ

delete $http.defaults.headers.common['X-Requested-With'];  

に、この最初の行を追加しましたリクエストがmyserver.comに送信されており、電話機JSONが応答していることを確認します。しかし、http.getはまだステータス0で失敗していて、 'data'はnullです。

次に試すものは不明です。どんな洞察も高く評価されます。

+0

= '?コールバックを追加してみてください?'あなたのURL – tymeJV

答えて

2

GETのためにOPTIONSリクエストをしてはいけません。成功のための最初の、およびエラーの秒を - 引数として二つの機能をとる、私はあなたがthen()を使用したいと思います

$http.get('http://myserver.com/phones.json').then(function(data) { 
    $scope.phones = data; 
}, function(err) { alert('Oh no! An error!'}); 

:私は何がやりたいことはあると思います。 $http.get()は、then()によって実行される約束を返します。

また、$httpの代わりに$resourceを使用します。それは、抽象度の高いを提供し、より多くの再利用可能なスタイルを可能http://docs.angularjs.org/api/ngResource $リソース

EDIT:。

チェックアウト角度デバッグ・ツールhere。スコープ内で利用できるものを示し、パフォーマンスデータを表示します。

+1

の終わりにそれはあるとして動作するはずです。チュートリアルでは、 "$ http.getサービスはsuccessメソッドを使用して約束オブジェクトを返します。このメソッドを呼び出して、非同期応答を処理し、電話データをスコープに割り当てます"。私は、** success **と**同じ結果を持つ** success&error **ブロックを使用しました。サービスとしてこれを書いています。私の目標は、リソースコールではなく、最も単純なhttpリクエストのデモです。 CharlesのレスポンスではJSONが常に表示されますが、http.getはステータス0を返します。これまでのところ、ローカルのフラットファイルの例だけでクロスドメインのサンプルアプリケーションが見つかりませんでした。 –

+0

'$ http.defaults.useXDomain = true; 'を追加しようとしました –

+0

ありがとうございました。それにしても状態コード0のままです。これはAngularの大きな制限です。 XHRを使用しないhttp.jsonpメソッドを使用して調べます。 –

0

ドメイン間のリクエストを行っている場合、許可されているかどうかを知るために、OPTIONリクエストをpre-flight requestとして作成するのは正しいことです。 CORSが失敗した場合、ブラウザはデータを受信しますが、エラーが発生します。 したがって、あなたは同じドメインにあなたのhtmlを置くか、CORSをあなたのバックエンドに追加する(それはより困難です)。

+1

私はCORSの問題を回避しました。しかし、CORSについて言えば、クロスドメインリクエストを希望するアプリについては珍しいことは何ですか? Angularアプリは5つの分散地理サービスを呼び出すことができますが、これは調整できません。 –

+0

SOR(Same Origin Police)と呼ばれるブラウザのセキュリティ上の問題です。まあ[CORS](http://www.html5rocks.com/en/tutorials/cors/)これはHTML5の機能で、これをいつもうまくやっているので、ハッキングなしでクロスサイトリクエストを行うことができます。 – pedroassis

+0

私の質問に答える素晴らしいチュートリアルです。 –

関連する問題