2013-08-16 48 views
6

Noobie在這裏。我正在編寫一個客戶端腳本,需要從另一個域讀取一個XML文件。我嘗試使用JSONP。我得到一個200響應,但客戶端由於某種原因無法訪問返回的數據。我得到兩個錯誤:跨域AJAX閱讀XML

Resource interpreted as Script but transferred with MIME type text/xml 

Uncaught SyntaxError: Unexpected token < 

下面的代碼(我已經刪除了XML的URL,因爲它是保密的):

$(document).ready(function() { 
    $.getJSON("urlOfFilecallback=?", function(data) { 
    console.log(data) 
}) 
}); 

當我試圖呈現數據在控制檯我得到:

ReferenceError: data is not defined 

我該如何解決這個問題?我需要使用代理嗎?

回答

1

XML默認情況下不允許跨域請求。

但是,通過少量服務器端編程,您可以創建代理並將數據加載到您自己的域中,並將其輸出爲XML。

更多信息,請參閱本Question

+1

順便說一句,我認爲IE8和更低的不支持跨域XHR請求,所以是的,做php腳本 – Alex

15

您不必編寫自己的代理。你可以用YQL,如果你想在這裏是一個例子,如何:

//sample site that returns xml 
site = 'http://goo.gl/9iQWyG'; 


var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?'; 

// Request that YSQL string, and run a callback function. 
// Pass a defined function to prevent cache-busting. 
$.getJSON(yql, function(data){ 
    console.log(data.results[0]); 
}); 

這裏是jsfiddle檢查的console.log。

(公衆YQL API的Usage limits是2000和請求/每IP每小時)

+1

是有任何其他方式比使用yql?我相信,如果他們阻止了您的IP或域名,這對企業來說就不是傀儡 - 它會突然崩潰! –

+0

理論上你可以編寫自己的代理服務器,並得到完全相同的結果..也許更簡單的使用和實現..但沒有它,你將永遠,必須依靠第三方代理服務器。 – Shaunak

+0

感謝您的回覆......關於我們如何創建自己的代理服務器的任何建議?非常感謝! –