当前位置: 首页 > 工具软件 > wsdl2js > 使用案例 >

纯js访问webService(wsdl)

隗嘉歆
2023-12-01

想要访问webService,最好先明白webService的一些相关概念,如soap、wsdl,因为你访问的时候真的无法绕开这些东西。

之前分享的一篇文章里有相关概念的介绍,不了解的朋友可以看看 WebService的相关概念


因为webService访问的是wsdl页面,使用的是SOAP协议,所以我们访问时采用XMLHTTP发送我们的请求。我的代码如下

<script language="JavaScript" type="text/javascript">
	var variable=['arg0','arg1','arg2'];
	var value=['libsys','2017-02-24 9:40',2];
	var method='getReader';
	var url='http://58.*.*.*:8081/HWWebService/LibServicePort?wsdl';
	var targetNamespace='http://service.ws.*.com/';
	var datacopy= '<?xml version="1.0" encoding="utf-8"?>';
			datacopy += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.*.com/">';
			datacopy += '<soapenv:Header/>';
			datacopy += '<soapenv:Body>';
			datacopy += '<ser:getReader>';
			for(var i=0;i<variable.length;i++)
   			{
   			 datacopy += '<'+variable[i]+'>'+value[i]+'</'+variable[i]+'>'; 
   			}
datacopy += '</ser:getReader>';
datacopy += '</soapenv:Body>';
datacopy += '</soapenv:Envelope>';  function RequestByPost()
{
   this.xmlhttp=null;
   if (window.XMLHttpRequest)
	  {// code for all new browsers
	  xmlhttp=new XMLHttpRequest();
	  }
	else if (window.ActiveXObject)
	  {// code for IE5 and IE6
	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	  }
   var data;
   data  =  '<?xml version="1.0" encoding="utf-8"?>'; 
   data += '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
   data += ' xmlns:xsd="http://www.w3.org/2001/XMLSchema" '
   data += ' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'; 
   data += '<soap:Header/>';
   data += '<soap:Body>'; 
   data += '<'+method+' xmlns="'+targetNamespace+'">'; 
   for(var i=0;i<variable.length;i++)
   {
    data += '<'+variable[i]+'>'+value[i]+'</'+variable[i]+'>'; 
   }


   data += '</'+method+'>'; 
   data += '</soap:Body>'; 
   data += '</soap:Envelope>';  
   alert(datacopy);
   xmlhttp.open("POST",url, true); //若通过get方式传输只须将post改为get
   xmlhttp.onreadystatechange =  function (){  
    if (xmlhttp.readyState == 4)
    {
		if (xmlhttp.status==200)
		{// 200 = "OK"
		document.getElementById("result").innerHTML = xmlhttp.responseText;
		}
	  else
		{
		alert("Problem retrieving XML data:" + xmlhttp.statusText);
		}
     
    }
   }
   xmlhttp.setRequestHeader ("Content-Type","text/xml; charset=utf-8"); 
   //xmlhttp.SetRequestHeader ("Content-Length",data.length); 
   xmlhttp.setRequestHeader ("SOAPAction",targetNamespace+method); 
   xmlhttp.send(datacopy); 
  }
//test
    RequestByPost();
</script>


代码调试过程中也遇到过诸多问题,可以下载软件SoapUI做一下测试,看看你的wsdl是否能够成功访问。

如果SoapUI没问题,而程序不行,可以用浏览器的开发者工具看一下你发送的http请求中包含哪些信息,和SoapUI中的信息进行对比或许就能发现问题了

 类似资料: