2013-02-24 48 views
0

我試圖從一個跨域支持的PHP服務器訪問數據。所以,當我嘗試與數據類型的$ .ajax:'jsonp'我在控制檯中有一個錯誤:未捕獲的SyntaxError:意外的令牌該文件被解釋爲一個JavaScript文件的請求失敗。你有沒有這個錯誤獲取數據的想法。獲取JSONPto工作

$.ajax({ 
    url : 'http://domaine.com/json.php', 
    contentType: "application/json; charset=utf-8", 
    dataType : 'jsonp', 
    success : function(data){ 
     console.log(data); 
     // no enter in this callback 
    }, 
    complete: function(data1, data2, data3){ 
     // no data from file.js 
    } 
}); 

回答

4

首先確保您的PHP腳本支持JSONP。確定需要傳遞的查詢字符串參數,以便該腳本返回JSONP。

http://domain.com/json.php?callback=abc 

您應該看到沿東西線:

abc({ ... some JSON here ... }) 

您可能需要調整callback名稱參數如果然後通過在地址欄中直接輸入如下地址測試它在瀏覽器你的PHP腳本需要一個不同的腳本。這可能是這種情況,如果你看到下面的輸出({ ... some JSON here ... }沒有被包裹在你的javascript函數)

而且一旦你確保你有一個有效的PHP腳本,返回JSONP,你可以使用它:

$.ajax({ 
    url : 'http://domain.com/json.php', 
    jsonp: 'callback', 
    dataType : 'jsonp', 
    success : function(data){ 
     console.log(data); 
     // no enter in this callback 
    }, 
    complete: function(data1, data2, data3){ 
     // no data from file.js 
    } 
}); 

事情需要注意:

  1. 我已經使用jsonp: 'callback'參數
  2. 我已經戒掉了contentType: 'application/json'參數b指定的回調因爲jQuery的JSONP實現使用script標籤,它不允許你設置任何請求頭。
1

你需要做到正確的回調進行評估,以增加?callback=?請求。不過,它可能不會被稱爲callback。您需要了解從域中調用的內容。

如果域(和瀏覽器)支持CORS,您甚至不需要使用JSONP。您可以使用正常請求。

+0

jQuery應該爲JSONP請求自動添加'callback =?' – Quentin 2013-02-24 17:50:06

+0

'如果域支持CORS'。我會添加'如果瀏覽器支持CORS',因爲它不足以讓域支持它。 – 2013-02-24 17:52:33

+0

@DarinDimitrov謝謝,補充說 – 2013-02-24 17:58:24