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 url加载了 json 文件。但通过角度它返回一个404未找到。

现在.json远程文件具有以下结构:

[
  { 
    "hello":"Europe"
  },

  {
    "hello":"USA"
  }
]

可以使用 $http.get() 获取上述文件,但不能使用 $http.jsonp() 获取。JSONP 无法解析具有上述结构的 .json 文件。我该如何解决这个问题?

4

1 回答 1

1

您需要?callback=JSON_CALLBACK在传递给的 URL 中指定 a $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 回答