2013-05-02 13 views
10

が動作していない、ここでのコードは次のとおりです。Angularjs JSONP私はここで何かが足りないかもしれないが、私はこのJSONPリクエスト仕事をすることはできません

var url = 'http://' + server + '?callback=JSON_CALLBACK'; 
$http.jsonp(url) 
    .success(function(data){ 
     console.log('success'); 
    }) 
    .error(function() { 
     console.log('error') 
    }); 

要求はOK発射すると私は、ヘッダの内容を(応答を取得していますタイプ:application/json):

[{"id": "1", "name": "John Doe"}, 
    {"id": "2", "name": "Lorem ipsum"}, 
    {"id": "3", "name": "Lorem ipsum"}] 

間違いがありますか?サーバーから返さなければならないフォーマットは正しいのでしょうか? 角度は、私が設定したエラーメッセージ(「エラー」)以外のエラーメッセージなしでエラーコールバックを起動します。

+0

w3schools上の例を参照してください?あなたが応答が正しく表示されません –

+1

は、それが –

+1

シオマネキや放火魔に見ていますどのような応答 – joakimbl

答えて

16

JSONPは、JavaScriptの関数呼び出しにあなたのデータをラップやる必要です。技術的には、JsonファイルではなくJavaScriptファイルを返します。

データは、サーバから返されたはずこれに類似:

// the name should match the one you add to the url 
JSON_CALLBACK([ 
    {"id": "1", "name": "John Doe"}, 
    {"id": "2", "name": "Lorem ipsum"}, 
    {"id": "3", "name": "Lorem ipsum"} 
]); 

編集:いくつかのいずれかが、他の角度のJSONPで問題全体につまずく場合もthis answer to this questionを読んで、それが実際にどのように処理するか、角度に関する便利な情報が含まれていてくださいコールバック関数。

+3

解決済み!ありがとう。 TheHippo @Gloopyがコメントした内容を含むように回答を編集できるかどうか:Angularの$ http.jsonpは、要求querystringパラメータをcallback = JSON_CALLBACKからcallback = angular.callbacksに変換します。_0 "であるため、応答は正確にJSON_CALLBACK()ではなく、 angular.callbacks._0([ {" id ":" 1 "、" name ":" John Doe "}、 {" id ":" 2 "、" name ":" Lorem ipsum "}]); 複数のリクエストがある場合、2番目のjsonpはリクエストquerystringコールバック= JSON_CALLBACKをangular.callbacks._1などに変換します。 )私は$ _GET [コールバック]を使用して正しいコールバック名を取得しています – Bema

30

@TheHippoデータは単なるJSONレスポンスではありませんが正しいです。 AngularJSのyoutubeエンドポイントに対するJSONPリクエストのHere is a working example

物事のカップルは、この例では注意する:

  • 角度の$http.jsonpcallback=JSON_CALLBACKからcallback=angular.callbacks._0へのリクエストクエリ文字列パラメータを変換します。
  • 私は、これは、クエリ文字列にalt=json-in-script代わりのalt=jsonを使用して、JSONP要求であるサービスに指定するために必要なユーチューブエンドポイントを呼び出します。これは彼らの中に見つかりましたdocumentation.
  • this urlからthis oneへの結果を比較して、ブラウザでJSONとJSONPの違いを確認してください。
  • 開発ツールのChrome Network Panelを見て、リクエスト/レスポンスの比較やトラブルシューティングに役立ててください。

私は、この例は非常に具体的である知っているが、うまくいけば、それは役立ちます!

+0

ありがとうTheHippo!非常に有用なコメント – Bema

+0

@Gloopyポイント3の両方のリンクは同じです – GFoley83

+0

@ GFoley83良いキャッチ! – Gloopy

-3

応答データが「純粋」JSONであれば、私たちは、角度の$ http.getでそれを処理することができます。あなたがPlunkerを投稿することができ

$http.get(url). 
    then(function(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
    $scope.responseArray = response.data; 
}, function(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
}); 

+3

CORSが –

+0

に設定されている場合のみ、これはjsonpとまったく関係ありません –

関連する問題