2010-06-18 93 views
9

我想從另一個服務器讀取xml到網頁中,我假設我的問題是同源策略,因此是跨域問題。使用jsonp得到xml跨域

我有一點谷歌搜索,似乎jsonp是前進的方向。 根據我在這裏找到的一些例子,在stackoverflow和其他網站上,這是我的,它不會用xml「命中」服務器。我可以在瀏覽器中查看xml。

$(document).ready(function(){  
    $.ajax({ 
     type: 'GET', 
     dataType: 'jsonp',     
     url: 'http://192.168.0.106:8111/getconfiguration?', 
     success: function (xml) 
     { //do stuff with received xml 
     }});  

有什麼建議嗎?請記住,我是一個關於JS/JQuery的新手; o)

回答

1

如果您有權訪問在遠程服務器上生成XML的代碼,則可以將所有東西包裝在jsonp中。

JSONP是一種通過使用<script>標籤獲取數據而不是嘗試遠程提取信息來解決同源策略的方法。

getconfiguation腳本,你必須像,其中,通過遠程調用

例如指定的回調

callback("SERVER GENERATED XML/JSON DATA GOES HERE"); 

,如果您的遠程腳本是PHP,你會讓它看起來像這樣:

<?php 
// getconfiguration.php 
echo "$_GET['callback']($configuration_data);" 
?> 

然後運行你提供的AJAX你的問題。 這是什麼實際上做的是動態插入腳本代碼到你的網頁是這樣的:

<script src="http://192.168.0.106:8111/getconfiguation.php?callback=???"></script> 

jQuery的填補了???爲你帶來一些獨特的包裝,它爲你的成功回調生成

+1

如果您無法訪問它,該怎麼辦?您只能以xml格式發送/接收數據。 – crosenblum 2010-12-16 15:31:40

+1

如果服務器沒有設置爲處理跨域,客戶端,JavaScript交互,那麼您不能強制它。在服務器上使用代理,flash或java小程序有各種各樣的解決方法。 – 2010-12-16 23:56:54

3

如果你沒有訪問服務器(例如,如果你正在使用api),你可以使用 YQL將你的XML轉換爲jsonp並使用自定義定製YQL URL(其中嵌入了類似SQL的語句)從瀏覽器查詢雅虎服務器。下面是一個示例(對於zillow api):

$('document').ready(function(){ 
    $.ajax({ 
    url: 'http://query.yahooapis.com/v1/public/yql?q=select * from zillow.search where address = "1835 73rd Ave NE" and citystatezip = "98039" and zwsid = "X1-ZWz1cse68iatcb_13bwv"&format=json&diagnostics=true&env=http://datatables.org/alltables.env&callback=mydata', 
    jsonpCallback: "mydata", 
    success: function(results) { 
     console.log(results.query.results.searchresults.response.results.result.zpid); 
    }, 
    dataType: 'jsonp' 
    }); 
});