2013-09-23 143 views
-1

我想在服務器上放置一個靜態jsonp文件(jsonp-test.php),但我無法讀取它。這是我有:如何從服務器提供靜態JSONP文件?

mycallback[ 
    {"key":"1","val":"test1"}, 
    {"key":"2","val":"test2"} 
] 

這就是我怎樣,我想閱讀:

var url = "http://www.remote-server/jsonp-test.php?callback=mycallback"; 
$.getJSON(url, function(data) { 
    alert(data.toSource()); 
}); 

我在做什麼錯?

+0

jsonp-test.php聽起來不像一個靜態文件。 'mycallback'是硬編碼的,還是腳本使用'callback'查詢參數來設置?這將繼續是一個PHP腳本,或者你打算將它轉換爲一個靜態文件? –

+0

@MichaelGeary'mycallback'在jsonp-test.php中被硬編碼。目前jsonp-test.php中沒有動態信息。 – user1448031

回答

0

因此,有幾件事情......當你說「我無法閱讀它」時,你能確認你實際上是從正確的地址請求JSONP嗎?例如,您是否可以在瀏覽器選項卡中打開URL

http://www.remote-server/jsonp-test.php?callback=mycallback 

並查看JSONP。如果是這樣,那麼我認爲你的JSONP格式的第二個問題是不正確的。 myCallBack函數實際上是被調用函數的名稱,因此,您的JSON的內容應包含在括號與半,像下面

mycallback(
    [ 
    {"key":"1","val":"test1"}, 
    {"key":"2","val":"test2"} 
    ] 
); 
+0

是的,我可以在瀏覽器中打開URL。我也按照你的建議對JSONP進行了修改,但是我仍然無法從jQuery中讀取它。 – user1448031

0

首先,布拉德利解釋說,修復JSONP文件的語法 - 它需要那些括號。這是因爲該文件需要是有效的JavaScript代碼。 JSONP只是一個使用JavaScript函數調用從腳本文件加載JSON數據的約定。

如果該文件保持靜態 - 特別是如果mycallback函數的名稱是硬編碼的 - 那麼您應該將其視爲調用全局函數的腳本文件,因爲這就是它的真實含義。定義一個名爲mycallback一個全球性的功能,並使用$.getScript()加載你的靜態JSONP/JavaScript文件:

window.mycallback = function(data) { 
    alert(data.toSource()); 
}; 

$.getScript('http://www.remote-server/jsonp-test.php'); 

請注意,您不需要爲?callback=mycallback靜態文件要麼。