2011-12-13 146 views
0

我想調用一個.NET web服務,從JavaScript返回一個XML文檔。 Web服務位於與我的應用程序不同的Web服務器上。我無法控制Web服務。我已經使用jQuery成功調用了服務,將dataType設置爲jsonp,我可以看到XML文檔在Firebug中返回。不過,我在Firebug控制檯中發現錯誤「missing; before statement」,看起來它試圖解析返回的xml(對於json也許??)。任何想法或什麼是調用返回xml的跨域Web服務的最佳方式?非常感謝!Javascript跨域Web服務調用

+0

你不能在XML中使用jsonp。您必須在服務器上使用代理。 – evan

回答

0

成才這樣的:

 
$.getJSON("http://yoursite.com/xml2json.php?callback=?", 
    {feed:"http://agency.nd.edu/agencynd-team.xml"}, 
    function(data) { 
     // process data here 
    } 
}); 

<?php 
header('content-type: application/json; charset=utf-8'); 

if(strlen($_GET["feed"]) > 13) { 
    $xml = file_get_contents(urldecode($_GET["feed"])); 
    if($xml) { 
    $data = @simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA); 
    $json = json_encode($data); 

    echo isset($_GET["callback"]) ? "{$_GET[’callback’]}($json)" : $json; 
    } 
} 
?> 
1

的JSON-P的數據格式是JavaScript程序。如果您使用JSON-P,那麼您返回的數據必須是JavaScript。

JSON-P的工作原理是加載使用<script>元素的文檔(這是永遠不會任意XML數據)

的選項有:

  1. 說服任何人做控制Web服務給你一個JSON-P接口
  2. 說服任何人沒有控制Web服務授予您的網站允許通過CORS訪問它(注limited browser support
  3. 代理的我們通過自己的服務器,以便您的JS B服務是在same origin
0

操作如果設置數據類型爲JSONP你應該得到響應包裹在函數調用。例如,如果你希望得到

object {"key": "value"} 

爲JSONP的反應應該是

parseRespone({"key":"value"}); 

這樣做的原因是,JSONP增加<腳本>標籤網頁標題,所以應該追加有效的JavaScript代碼那裏。

如果你沒有可能與服務器的開發者聯繫,我會建議做一個Ajax調用你的頁面,在那裏頁面將與.NET服務器進行curl連接,並在純json中迴應響應。

0

一種可能性是完全避免使用JSON,而是使用cURL和PHP代理。將數據發送到服務器上的PHP腳本,然後與其他域上的腳本形成cURL會話,並返回到原始AJAX調用方的結果。