¿Hay alguna manera de consumir un servicio web usando JavaScript? Estoy buscando una forma integrada de hacerlo, usar un marco de JavaScript no es una opción.Consumir un servicio web usando Javascript
Respuesta
Puede consumir un servicio web utilizando JavaScript de forma nativa utilizando el objeto XmlHttpRequest. Sin embargo, crear instancias de este objeto varía según el navegador. Por ejemplo, Firefox e IE 7+ le permiten crear una instancia como un objeto JavaScript nativo, pero IE6 requiere que lo instancia como un control ActiveX.
Debido a esto, recomiendo usar una biblioteca de abstracción como jQuery. Si no es una opción, abstraiga la creación en un método de fábrica y verifique la versión del navegador.
Para usar esto para realizar una llamada al servicio web simplemente crea una instancia del objeto y luego llame al método open(). Recomiendo que esto se haga de manera sincronizada para mantener la UI receptiva. Cuando se invoca de manera asíncrona, recibirá devoluciones de llamada a su método asíncrono especificado que indicará el estado de la solicitud. Cuando el estado es 4 (cargado) puede tomar los datos de respuesta y luego procesarlos.
Cómo procesa los datos dependerá de qué se trate, si es JSON, puede ejecutarlo a través del método eval() de JavaScript, pero eso tiene algunas implicaciones de seguridad. Si es XML, puede usar el XML DOM para procesarlo.
Consulte Wikipedia para obtener más información sobre el objeto XMLHttpRequest.
Puede usar el objeto XMLHttpRequest, pero como no desea utilizar ningún marco de JavaScript, deberá ordenar y desempaquetar los sobres SOAP usted mismo.
Solo tiene que preocuparse por los sobres SOAP si se trata de un servicio web SOAP. Se pueden llamar algunos servicios web tranquilos y leer los resultados sin ningún procesamiento previo. – brien
Puede crear un XMLHttpRequest si el servicio está alojado dentro de su dominio. De lo contrario, tendrá problemas entre dominios.
s/could/will/si no me equivoco. –
Sí, tienes razón. Cada vez que surgen cosas de dominios cruzados, me pregunto cuáles son las reglas exactas. Solo trato de evitar esos problemas por completo;) – brien
¿Qué quiere decir, específicamente, por "problemas entre dominios"? –
También verifique XML HTTP Request para obtener una buena página de información sobre el uso del objeto XmlHttpRequest.
Hay una pequeña biblioteca escrita en javascript que se puede utilizar como cliente XML-SOAP. No sé si funciona en todos los navegadores, pero podría ser útil. Puede encontrarlo here
Esto funcionó. Es viejo (buscando Netscape), fue escrito antes de que salieran todas las herramientas de Ajax. Tienes que manejar diferentes navegadores, básicamente, IE lo hace de una manera, y todos los demás lo hacen de otra manera.
// javascript global variables
var soapHeader = '<?xml version=\"1.0\"?>'
+ '<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"'
+ ' SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"'
+ ' xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\"'
+ ' xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\"'
+ '>'
+ '<SOAP-ENV:Header/>'
+ '<SOAP-ENV:Body>';
var soapFooter = '</SOAP-ENV:Body>'
+ '</SOAP-ENV:Envelope>';
var destinationURI = '/webservices/websalm';
var actionURI = '';
function callWebService(nsCallback,ieCallback,parms) {
try
{
// Create XmlHttpRequest obj for current browser = Netscape or IE
if (navigator.userAgent.indexOf('Netscape') != -1)
{
SOAPObject = new XMLHttpRequest();
SOAPObject.onload = nsCallback;
} else { //IE
SOAPObject = new ActiveXObject('Microsoft.XMLHTTP');
SOAPObject.onreadystatechange = ieCallback;
}
SOAPObject.open('POST', destinationURI, true);
// Set 2 Request headers, based on browser
if (actionURI == '') {
SOAPObject.setRequestHeader('SOAPAction', '\"\"');
} else { SOAPObject.setRequestHeader('SOAPAction', actionURI);
}
SOAPObject.setRequestHeader('Content-Type', 'text/xml');
// Compose the Request body from input parameter + global variables
var requestBody = soapHeader + parms + soapFooter
// Send, based on browser
if (navigator.userAgent.indexOf('Netscape') != -1)
{
SOAPObject.send(new DOMParser().parseFromString(requestBody,'text/xml'));
} else {
SOAPObject.send(requestBody);
}
} catch (E)
{
alert('callWebService exception: ' + E);
}
}
Simplemente curioso. ¿Era JavaScript capaz de llamar a las API/servicios web antes de que XHR apareciera en el idioma o hasta ese momento solo * para la manipulación DOM en páginas HTML? – RBT
- 1. consumir servicio web SOAP
- 2. Consumir un servicio web REST XML
- 3. consumir servicio web SOAP utilizando jquery
- 4. Consumir el servicio web SOAP en ASP.NET
- 5. Consumir servicio web desde un archivo DLL .NET - app.config problema
- 6. ¿Cómo puede Excel 2007/2010 consumir un servicio web REST?
- 7. Cómo consumir fácilmente un servicio web desde PHP
- 8. Cómo consumir un servicio web RESTful en Lotus Notes
- 9. Consumir un servicio web utilizando una interfaz diferente
- 10. Cómo consumir un servicio web ColdFusion con dotnet
- 11. ¿Cómo consumir el servicio web RESTful en mi proyecto JSF?
- 12. ¿Cómo consumir un servicio web con estado usando la clase SoapClient de PHP?
- 13. ¿Se puede consumir un servicio WCF como si fuera un servicio web ASP.NET?
- 14. ¿Cómo consumir un servicio relajante en .NET?
- 15. ¿Cómo consumir el servicio OData con Html/Javascript?
- 16. ¿Puedo consumir un servicio WCF REST usando la Autenticación de Windows sin bibliotecas .NET?
- 17. Escribiendo un cliente C# para consumir un servicio web Java que devuelve una matriz de objetos
- 18. Consumir el servicio oData de Delphi
- 19. mejor manera de consumir un servicio web en un código asp.net detrás de
- 20. ¿Cómo consumir un servicio SOAP sobre HTTPS en C#?
- 21. Consumir servicios web SOAP en iOS
- 22. ¿Cómo puedo consumir un servicio WCF usando un archivo WSDL local?
- 23. cómo llamo a un servicio web usando phonegap para android
- 24. Cliente ASP.NET/C# para consumir un servicio web PHP/MYSQL (WSDL)
- 25. System.NET.WebException arrojado al consumir un servicio web a través de HTTPS
- 26. ¿Cuál es la mejor forma de consumir un servicio web de VB6?
- 27. Servidor SQL: uso de la integración CLR para consumir un servicio web
- 28. ¿Cuál es el "modo Rails" adecuado para consumir un servicio web RESTful en otro dominio?
- 29. Consumir servicios web JSON-RPC en .NET
- 30. servicio Banda de transmisión usando javascript
Simplemente curioso. ¿Era JavaScript capaz de llamar a las API/servicios web antes de que XHR apareciera en el idioma o hasta ese momento solo * para la manipulación DOM en páginas HTML? – RBT