1

.jsonリモート Firebase サーバーからファイルを取得しようとしています。

function fetchData(remoteJsonId){
    var url = "https://myAppName.firebaseapp.com/topics/"+remoteJsonID;
    console.log(url); //This variable expands to the full domain name which is valid and                       returns success both on wget and the browser
    $http.jsonp(url).then(
        function(resp){

        },
        function(err){
            console.log(err.status) // This posts "404" on console.
        }
    );
}

しかしurl、ブラウザで開くと、json ファイルが読み込まれます。wget urljsonファイルがロードされても。しかし、角度を介して、404見つかりませんでした。

これで、.jsonリモート ファイルの構造は次のようになります。

[
  { 
    "hello":"Europe"
  },

  {
    "hello":"USA"
  }
]

上記のファイルは、$http.get() を使用して取得できますが、$http.jsonp() を使用して取得することはできません。JSONP は、上記の構造を持つ .json ファイルを解析できません。どうすればこれを回避できますか?

4

1 に答える 1

1

?callback=JSON_CALLBACKに渡す URL にを指定する必要があります$http.jsonp

Angular の$http.jsonpドキュメントから:

jsonp(url, [config]);
Shortcut method to perform JSONP request.

Parameters
Param   Type    Details
url     string  
Relative or absolute URL specifying the destination of the request.
The name of the callback should be the string JSON_CALLBACK.

その最後の行は、あなたが見逃しているものです。

簡単な例 (Firebase ホスティングではなく、Firebase データベースを使用):

var app = angular.module('myapp', []);
app.controller('mycontroller', function($scope, $http) {
  var url = 'https://yourfirebase.firebaseio.com/25564200.json';
  $http.jsonp(url+'?callback=JSON_CALLBACK').then(
    function(resp){
      console.log(resp.data); // your object is in resp.data
    },
    function(err){
        console.error(err.status)
    }
  );  
});

動作を確認したい場合: http://jsbin.com/robono/1/watch?js,console

于 2014-08-29T15:26:52.910 に答える