2011-08-05 25 views
10

TuttiRichiesta SOAP multipla utilizzando Javascript

Sto usando la mia API SOAP utilizzando lo script java.

questo esempio spiegare come inviare un'unica richiesta di sapone utilizzando js

var symbol = "MSFT"; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true); 
xmlhttp.onreadystatechange=function() { 
if (xmlhttp.readyState == 4) { 
    alert(xmlhttp.responseText); 
    // http://www.terracoder.com convert XML to JSON 
    var json = XMLObjectifier.xmlToJSON(xmlhttp.responseXML); 
    var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text; 
    // Result text is escaped XML string, convert string to XML object then convert to JSON object 
    json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result)); 
    alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text); 
} 


} 
xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote"); 
xmlhttp.setRequestHeader("Content-Type", "text/xml"); 
var xml = '<?xml version="1.0" encoding="utf-8"?>' + 
'<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/">' + 
    '<soap:Body> ' + 
    '<GetQuote xmlns="http://www.webserviceX.NET/"> ' + 
     '<symbol>' + symbol + '</symbol> ' + 
    '</GetQuote> ' + 
    '</soap:Body> ' + 
'</soap:Envelope>'; 
xmlhttp.send(xml); 
// ...Include Google and Terracoder JS code here... 

Ora voglio inviare più richiesta di sapone alla volta (media richiesta più di una busta).

+3

Nulla dovrebbe impedirti di inviare un'altra richiesta ('nuovo XMLHttpRequest()') immediatamente dopo questa. È un invio asincrono. – namuol

+0

questo è un problema http://stackoverflow.com/questions/6922058/what-is-wrong-this-js-got-this-error-cannot-use-object-of-type-stdclass-as-ar –

+0

hai i sto usando il tuo codice ma xmlhttp.responseText risultati null. – user969275

risposta

6

Finché il terzo parametro in XMLHttpRequest.open è impostato su true, la chiamata sarà asincrona. Quindi dovresti riuscire a inviarne uno nuovo senza troppi sforzi. È necessario un nuovo oggetto XMLHttpRequest affinché funzioni.

Se si desidera utilizzare la stessa callback, è possibile definirla come una funzione e utilizzare this per lavorare con l'oggetto richiesta.

function soapCallback() { 
    if (this.readyState == 4) { 
     alert(this.responseText); 
     // http://www.terracoder.com convert XML to JSON 
     var json = XMLObjectifier.xmlToJSON(this.responseXML); 
     var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text; 
     // Result text is escaped XML string, convert string to XML object then convert to JSON object 
     json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result)); 
     alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text); 
    } 
} 

var symbol = "MSFT"; 
var xml = '<?xml version="1.0" encoding="utf-8"?>' + 
'<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/">' + 
    '<soap:Body> ' + 
    '<GetQuote xmlns="http://www.webserviceX.NET/"> ' + 
     '<symbol>' + symbol + '</symbol> ' + 
    '</GetQuote> ' + 
    '</soap:Body> ' + 
'</soap:Envelope>'; 

var xmlhttp1 = new XMLHttpRequest(); 
xmlhttp1.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true); 
xmlhttp1.onreadystatechange=soapCallback; 
xmlhttp1.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote"); 
xmlhttp1.setRequestHeader("Content-Type", "text/xml"); 
xmlhttp1.send(xml); 

var xmlhttp2 = new XMLHttpRequest(); 
xmlhttp2.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true); 
xmlhttp2.onreadystatechange=soapCallback; 
xmlhttp2.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote"); 
xmlhttp2.setRequestHeader("Content-Type", "text/xml"); 
xmlhttp2.send(xml); 
+0

sto affrontando questo problema http://stackoverflow.com/questions/6922058/what-is-wrong-this-js-got-this-error-cannot-use-object-of-type-stdclass-as-ar –

+0

Questo problema è causato da un errore nel servizio SOAP e non è correlato a questa domanda. – wazz3r

Problemi correlati