2011-10-12 111 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的路线行事。