2011-11-16 59 views
1

我正在嘗試使用jQuery來查詢返回XML的RESTful服務。我無法訪問服務器,因此我無法更改它提供的輸出或標題。如何在沒有訪問服務器的情況下獲取訪問控制 - 允許 - 來源錯誤的情況下調用REST服務?

響應我收到的XML,但當然我得到一個跨站點腳本錯誤。

要解決這個問題,我嘗試使用JSONP,但因爲我收到的格式是XML,也錯誤:(資源解釋爲腳本,但與MIME類型application/XML傳輸)。

我看到在使用Safari的網絡督察內容的XML響應,所以是有辦法,我可以防止這種錯誤,並使用XML進行?

我希望這是有道理的。作爲參考,這裏是我試過的代碼:

首先是原來的ajax查詢導致錯誤:XMLHttpRequest無法加載https://the-rest-url/xxx。來源http://127.0.0.1:8020是不允許的訪問控制允許來源(這是本地主機,因爲我用我的電腦開發 - 我也嘗試部署到Web服務器)。

$.ajax({ 
    url: 'https://the-rest-url/xxx', 
    success: function() {alert("success");}, 
    error: function() {alert("error")} 
}); 

接下來是JSONP嘗試返回的XML,而導致資源解釋爲腳本但與MIME類型application/XML傳送。錯誤。我也試過dataType:「jsonp文本」和其他變化...

 $.ajax({ 
     url: 'https://the-rest-url/xxx', 
     success: function() {alert("success");}, 
     error: function() {alert("error")}, 
     dataType: "jsonp", 
     jsonp: "jsonpCallback" 
}); 

任何幫助極大讚賞。 謝謝。

回答

1

我不知道除了JSONP客戶端跨域請求了可靠的解決辦法的。雖然自1.5版以來,jQuery可以接收格式爲JSON以外的其他格式的JSONP responses,但該響應必須與JSONP兼容,即被包裝在提供的回調中。在你的情況下,你可能別無選擇,只能爲要請求的數據實現服務器端封裝(here是PHP的一個示例),以便它似乎來自同一個域。

+0

謝謝。雖然我懷疑它,但我希望這不會是答案;)最終,我想將它放到Google Gadget中,所以我無法使用服務器端封裝器嗎?或者,Google Gadgets完全有另一種方式嗎?再次感謝。 – Darren

+0

那麼沒有什麼阻止你創建一個返回JSONP的包裝器。 – Daff

相關問題