2011-10-12 114 views
0

我面對xmlhttp常見的跨域問題。跨域問題XMLHttp

我想使用SOAP協議訪問WSDL Web服務。我不使用PHP,所以我不能使用

header('Access-Control-Allow-Origin: *'); 

我也不能使用JSONP,因爲我得到的是不是JSON格式,但在XML格式的響應。 有沒有其他方法可以解決此問題。

這是我的代碼片段。

var user1="user_name"; 
var pass1="******"; 
var url="http://ideone.com/api/1/service.wsdl"; 

var soap_msg="<?xml version='1.0' encoding='UTF-8' standalone='no'?>"+ 
"<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'"+   
"xmlns:tns='http://ideone.com:80/api/1/service' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'"+ 
"xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'"+ 
"xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/' "+ 
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' >"+ 
"<SOAP-ENV:Body><mns:getLanguages xmlns:mns='http://ideone.com:80/api/1/service' SOAP- ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>"+ 
"<user xsi:type='xsd:string'>"+user1 +"</user><pass xsi:type='xsd:string'>"+pass1+"</pass>"+  
"</mns:getLanguages></SOAP-ENV:Body></SOAP-ENV:Envelope>"; 
var oXmlHttp= new XMLHttpRequest(); 
oXmlHttp.open("POST",url,true); 
oXmlHttp.setRequestHeader("Content-Type", "text/xml"); 
oXmlHttp.setRequestHeader("SOAPAction", "http://ideone.com/api/1/service#getLanguages"); 
oXmlHttp.setRequestHeader("Access-Control-Allow-Origin", "*"); 
oXmlHttp.send(soap_msg); 
var res=oXmlHttp.responseXML; 

在此先感謝。

+0

您有權訪問和控制服務器嗎?如果是這樣,什麼OS? –

+0

@michael Morton沒有...我沒有訪問服務器 – santhosh

回答

1

下面是YUI的一個鏈接,您可能會發現它很有用。

http://developer.yahoo.com/yql/guide/yql-jsonp-x.html

他們已經寫了一個回調,其本質上是一個信封,允許被返回的XML。

+0

其實它並沒有幫助我 – santhosh

+0

我認爲這樣的事情真的是你唯一的選擇。你可能不想使用YUI本身,但是你可以編寫一個JSON包裝器,它將XML作爲一個字符串返回(當然,適當的JSON編碼),然後將它交給解析器。 –

0

只是爲了記錄,應允許在服務器端設置允許訪問標題,即在ideone.com上,您不控制它。在這一點上,你所能做的就是沿着easyXDM的路線行事。