在之间的介绍中提到过,WebService的底层数据传输本质上就是一种特殊逇HTTP的POST请求。
WebService使用固定的XML格式封装成soap消息,可以使用http作为底层数据传输,但并不局限于http协议,方法返回消息是有标准的。
既然如此,那JS是可以发送HTTP的POST请求的,只要组装好正确的WebService的报文,即可实现JS的WebService调用,当然,这其中还好考虑JS的跨域问题,解决方案有很多种,不在此罗列了。
JS调用WebServiced代码如下:
附录:
源码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<script type="text/javascript">
function RequestWebService() {
var data;
//SOAP 请求报文格式,
data = '<?xml version="1.0" encoding="utf-8"?>';
data = data + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
data = data + '<soap:Body>';
data = data + '<xn2:add xmlns:xn2="http://webservice.demo.com/">';//这里就是发布的方法名和xml文档中的命名空间地址(图中画线部分)
data = data + '<arg0>1</arg0>';
data = data + '<arg1>2</arg1>';
data = data + '</xn2:add>';
data = data + '</soap:Body>';
data = data + '</soap:Envelope>';
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var URL="http://10.10.10.236:8982/WebService?wsdl";
xmlhttp.Open("POST",URL, false);
xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8"); //SOAP 1.1为text/xml ; 1.2为 application/soap+xml
xmlhttp.Send(data);
alert("请求报文:"+data);//SOAP请求报文格式
var text = xmlhttp.responseText;
alert('返回报文'+'\n'+text); //SOAP响应报文格式
document.getElementById("data").innerHTML = "返回结果为:"+text;
}
</script>
<input type="button" value="JS调用WebService" onclick="RequestWebService()"></input>
<p id="data"></p>
</body>
</html>