Ecco come inserire chiamate a webservices in pagine HTML usando Javascript:
Ecco lo scheletro di una XMLHttpRequest:
Esempio di parser del metodo Get_MyIpAddress
var req;
´srv è l'oggetto con i parametri per la chiamata
function loadXMLDoc(srv) {
req = false;
´distinguiamo explorer dagli altri browser
if(window.XMLHttpRequest) {
try {req = new XMLHttpRequest();} catch(e) {req = false;}}
else if(window.ActiveXObject) {
try {req = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e) {
try {req = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e) {req = false;}
}
}
if (req) {
´inpostiamo la funzione da chiamare per parserizzare i dati
req.onreadystatechange = function(){processReqChange(srv.callback);}
´il terzo parametro a true indica la modalità asincrona
req.open("POST", srv.url, true);
´notifichiamo che i dati sono in xml
req.setRequestHeader("Content-Type", "text/xml");
´inseriamo l'action nell'header della chiamata http
req.setRequestHeader("Soapaction", srv.soapact);
´passiamo i dati per l'authorization, se mancanti il sito nexus chiede l'inserimento dell'indirizzo email come user
req.setRequestHeader("Authorization", srv.auth);
req.send(srv.post);}
}
function processReqChange(callback) {
if (req.readyState == 4) {
´a risposta completa passiamo il risultato xml al parser specificato
´if (req.status == 200) callback(req.responseXML);
´else alert("Problemi nel recupero dei dati XML:\n" + req.statusText);}
}
´il parser: nel nostro caso i servizi chiamati mostrano il risultato in div distinti
res_obj(activediv).innerText=getxmlByName(xml,"ip_address").firstChild.data;}
´ le funzuioni di appoggio
function res_obj(divID){return findChildByName(document.getElementById(divID),"risultato");}
function getxmlByName(xml,n){return xml.getElementsByTagName(n)[0];}
´e l'HTML
<div id="d0" class="para"><p">Il tuo IP è:<h3 name=risultato"></h3"></div">
Per provare il tutto sulla vostra macchina trovate lo script qui e una pagina HTML demo qui.
Attenzione: non sono attive online, ma solo se scaricate sul vostro computer.