以下是.json
文件的示例:
[
{
"name":"Jon Skeets"
},
{
"name":"Bill Joy"
}
]
如果获得此json文件:
$http.jsonp(pathToFile).then() {
...
}
它返回404. pathToFile
我用curl, wget and the browser
验证了它没有任何问题。但问题是jsonp()
必须使用上述结构获取.json
个文件。 $http.get()
可以使用上述结构解析.json
个文件。但是JSONP
不能。它需要顶层的字典而不是数组。
为了证明这一点,我创建了这个firebase:https://blazing-fire-6512.firebaseapp.com/name.json
在您的浏览器或wget中获取链接并且它可以正常工作。尝试使用Angular here获取它并返回404请求失败。
答案 0 :(得分:1)
Firebase托管不支持JSONP。它不处理用于评估跨源的JSONP回调的callback
参数。
假设您将此JSON存储在URL http://example.com/name.json
:
{ "name":"Jon Skeets" }
如果您访问网址http://example.com/name.json
,则会获得该JSON。这正是$http.get
所做的。
当服务器支持JSONP时,它接受callback
参数。在这种情况下,网址最终为http://example.com/name.json?callback=displayName
,响应为:
displayName('{ "name":"Jon Skeets" }');
这允许跨源来检索JSON数据,这是JSONP存在的全部原因。
Firebase的动态数据服务器支持JSON。 Firebase托管没有。
一些可能的解决方案:
$http.get
。