Ajax通過SOAP協議呼叫Web服務
前段時間做了一個用Ajax呼叫Web服務的Demo,在此記錄一下。呼叫的是一個地理編碼服務,該服務可以將地址轉換為地理座標,如下所示:
點選該服務可以看到該服務SOAP形式的請求與返回結果形式,如下圖所示:
我們用Ajax通過SOAP協議呼叫Web服務,其實就是要構建SOAP形式的請求的xml,如上圖所示,請求的xml格式一定要與上面給出的SOAP1.1 request保持一致。首先看一下畫紅框的頭資訊,Ajax的呼叫必須是POST請求,並且Ajax的Content-Type和SOAPAction這兩個頭資訊也必須和上文該服務給出的一致。如下所示:
var url = "https://www.ip-assistance.pt/ws/gpsg/gps.asmx";//注意是https
xmlHttp.open("post", url, true);
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction","http://www.ip-assistance.pt/WS/GPS/FreeTextGeoCode");
從上圖中可以看到,瀏覽器位址列中的協議是https,所以我們Ajax的url也必須是https://...
全部程式碼如下:
<!doctype>
<html>
<head>
<title></title>
<style>
table td.first{
width:180px;
}
</style>
</head>
<body>
<div style="width:1000px;">
<table style="width:100%;">
<tr>
<td class="first">lcCalle</td>
<td><input type="text" id="lcCalle" value="Largo Jean Monnet" /></td>
</tr>
<tr>
<td class="first">lnResultados</td>
<td><input type="text" id="lnResultados" value="100" /></td>
</tr>
</table>
<textarea id="textarea1" style="width:100%;height:400px;resize:none;"></textarea>
<button style="display:block;" onclick="soapFreeTextGeoCode()">FreeTextGeoCode</button>
</div>
<script type="text/javascript">
var textarea1 = document.getElementById("textarea1");
function getXmlHttp(){
var xmlHttp = null;
try{
xmlHttp = new XMLHttpRequest();
}
catch(e){
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
function soapFreeTextGeoCode(){
var xmlHttp = getXmlHttp();
if(!xmlHttp){
alert("瀏覽器不支援Ajax !");
return;
}
textarea1.value = "";
var lcCalle = document.getElementById("lcCalle").value;
var lnResultados = parseInt(document.getElementById("lnResultados").value);
var data = "<?xml version='1.0' encoding='utf-8'?>";
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 += "<soap:Body>";
data += "<FreeTextGeoCode xmlns='http://www.ip-assistance.pt/WS/GPS/'>";
data += "<lcId>DBB031FBACB3</lcId>";
data += "<lcCalle>"+lcCalle+"</lcCalle>";
data += "<lnResultados>"+lnResultados+"</lnResultados>";
data += "<lcApp>SIA</lcApp>";
data += "</FreeTextGeoCode>";
data += "</soap:Body>";
data += "</soap:Envelope>";
var url = "https://www.ip-assistance.pt/ws/gpsg/gps.asmx";//注意是https
xmlHttp.open("post", url, true);
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction","http://www.ip-assistance.pt/WS/GPS/FreeTextGeoCode");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var responseXML = xmlHttp.responseXML;
var FreeTextGeoCodeResult = responseXML.getElementsByTagName("FreeTextGeoCodeResult")[0];
var childNodes = FreeTextGeoCodeResult.childNodes;
var length = childNodes.length;
for(var i=0;i<length;i++){
var stringNode = childNodes[i];
var textNode = stringNode.firstChild;
var str = textNode.data;
textarea1.value += str + "\n";
}
console.log("FreeTextGeoCode Result:",responseXML);
}
}
xmlHttp.send(data);
}
</script>
</body>
</html>
需要注意的是,上文中所拼接的lcId的值是我隨意寫的,所以這個服務不能真正使用,要想使用需要向服務釋出者申請一個key,此處只是假設我們已經獲取了key為DBB031FBACB3,不過呼叫該服務的Ajax的程式碼邏輯確實是如上文所述,最後我們在回撥函式的xmlHttp.responseXML中可以獲取返回結果,具體如何解析就靈活多了。
相關文章
- soap協議的web服務協議Web
- web服務中soap、wsdl、uddi理解Web
- web通訊協議Web協議
- apache cxf-2.4.3 +spring-3.0.5釋出SOAP協議WebService服務ApacheSpring協議Web
- 瞭解下SOAP HTTP 協議HTTP協議
- SOAP協議規範(一)協議
- SOAP協議規範(二)協議
- Android程式使用SOAP呼叫遠端WebService服務AndroidWeb
- 使用SSL協議保證web服務通訊安全(一、基礎理論篇)協議Web
- Raft協議:通過TermId大的通過Raft協議
- Thrift協議的服務模型協議模型
- 翻譯-使用Spring呼叫SOAP Web ServiceSpringWeb
- Http get,post,soap協議的區別HTTP協議
- onvif soap 協議的錯誤程式碼協議
- Java呼叫使用SSL/HTTPS協議來傳輸的axis webservice服務JavaHTTP協議Web
- 通過OpenLayers3呼叫TileMapServer的柵格瓦片服務與失量瓦片服務S3Server
- 通過故事引申網路協議TCP協議TCP
- TCP協議服務端和客戶端的連線與通訊TCP協議服務端客戶端
- PHP通過傳遞物件引數呼叫asp.netWebservice服務PHP物件ASP.NETWeb
- java實踐:tomcat_簡化版_服務呼叫(不含網路和協議)JavaTomcat協議
- DHCP協議格式、DHCP服務搭建、DHCP協商互動過程入門學習協議
- SOAP協議棧是令人尷尬的失敗?協議
- HTTP和SOAP完全就是兩個不同的協議HTTP協議
- wechat web協議Web協議
- jftp通過sftp協議上傳檔案FTP協議
- php通過ftp協議上傳檔案PHPFTP協議
- 通訊協議協議
- XML Web 服務技術解析:WSDL 與 SOAP 原理、應用案例一覽XMLWeb
- Dubbo服務呼叫過程原始碼解析④原始碼
- grpc套路(四)php通過grpc呼叫golang的grpc介面服務RPCPHPGolang
- PHP5 SOAP呼叫原理及實現過程PHP
- VS2013建立和呼叫Web服務Web
- 第28條:通過協議提供匿名物件協議物件
- syslog協議及rsyslog服務全解析協議
- 真正“搞”懂HTTP協議11之代理服務HTTP協議
- Dubbo原始碼解析之服務呼叫過程原始碼
- web網路協議Web協議
- Redis 通訊協議Redis協議