2014-08-30 55 views
-1

下面是一個.json文件的例子:

$http.jsonp(pathToFile).then() { 
    ... 
} 

它返回一個404還有:如果這個JSON文件作爲獲得

[ 
    { 
    "name":"Jon Skeets" 
    }, 

    { 
    "name":"Bill Joy" 
    } 
] 

pathToFile我沒有錯,我用curl, wget and the browser對它進行了驗證。但問題是jsonp()必須使用上述結構獲取.json文件。 $http.get()可以解析具有上述結構的.json文件。但JSONP不能。它需要頂層的字典而不是數組。

爲了證明這一點,我已經創造了這個火力點:https://blazing-fire-6512.firebaseapp.com/name.json

獲取在瀏覽器或wget的鏈接和它的作品。嘗試使用Angular here提取它,並返回404請求失敗。

+2

你使用任何斷絕像XAMPP/Django的/ Tomcat上運行的代碼? – 2014-08-30 13:53:28

+0

@ArpitSrivastava:OP的最後一個問題是在Firebase上。 http://stackoverflow.com/questions/25564200/obtaining-json-files-from-firebase。但是我已經能夠使用'$ http.jsonp'從Firebase獲得這樣的結構,沒有問題,如下所示:http://jsbin.com/musej/1/watch?js,console。 – 2014-08-30 14:39:14

+0

@ArpitSrivastava是的我正在使用Apache。 – InfinitePrime 2014-08-30 14:55:07

回答

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參數。在這種情況下,URL結束http://example.com/name.json?callback=displayName和響應是:

displayName('{ "name":"Jon Skeets" }'); 

這允許跨原點要檢索JSON數據,這是整個原因JSONP的存在。

Firebase的動態數據服務器支持JSON。 Firebase託管不。

一些可能的解決方案:

  1. 如果要存儲的JSON文件在火力地堡託管應用程序,你可以只使用$http.get
  2. 由於您控制了JSON文件,因此您也可以簡單地在name.json中添加函數名稱
  3. 將JSON文件存儲在支持JSONP的主機上。我經常把它們放在Github Gists中。
  4. 存放在火力地堡分層數據庫的數據結構,而不是他們的託管服務器上
+0

你知道提供JSONP的任何其他託管提供商? – InfinitePrime 2014-08-30 15:11:08

+0

我認爲你在錯誤的方框中輸入了最後一個問題。 Google是右邊的一個標籤。但是我剛纔在最新的編輯中至少提供了一個選項。 – 2014-08-30 15:18:06

+0

感謝您抽出時間回覆。我現在不會弄錯你的。如果可能,請你解釋第二個選項。在name.json中放置一個函數名稱? – InfinitePrime 2014-08-30 15:26:09