使用Javascript来使用Web服务

时间:2008-10-16 10:35:37

标签: javascript web-services

有没有办法使用JavaScript来使用Web服务?我正在寻找一种内置的方法,使用JavaScript框架不是一种选择。

6 个答案:

答案 0 :(得分:17)

您可以使用XmlHttpRequest对象本地使用JavaScript来使用Web服务。但是,实例化此对象因浏览器而异。例如,Firefox和IE 7+允许您将其实例化为本机JavaScript对象,但IE6要求您将其实例化为ActiveX控件。

因此我建议使用抽象库,如jQuery。如果这不是一个选项,那么将创建抽象为工厂方法并检查浏览器版本。

要使用它来进行Web服务调用,只需实例化该对象,然后调用它的open()方法。我建议这样做是异步的,以保持UI响应。调用异步时,您将获得指定异步方法的回调,该异步方法将指示请求的状态。当状态为4(已加载)时,您可以获取响应数据然后进行处理。

如何处理数据将取决于它是什么,如果它是JSON,那么你可以通过JavaScript的eval()方法运行它,但这确实有一些安全隐患。如果是XML,您可以使用XML DOM来处理它。

有关XMLHttpRequest对象的更多信息,请参阅Wikipedia

答案 1 :(得分:5)

如果服务托管在您的域中,则可以创建XMLHttpRequest。如果没有,您将遇到跨域问题。

答案 2 :(得分:2)

您可以使用XMLHttpRequest对象,但由于您不想使用任何JavaScript框架,因此您必须自己编组和解组SOAP信封。

答案 3 :(得分:0)

同时检查XML HTTP Request以获取有关使用XmlHttpRequest对象的详细信息页。

答案 4 :(得分:0)

有一个用javascript编写的小库,可以用作XML-SOAP客户端。 我不知道它是否适用于所有浏览器,但它可能会帮助你。你可以找到它here

答案 5 :(得分:0)

这很有用。它是旧的(检查Netscape),是在所有Ajax工具出来之前编写的。你必须处理不同的浏览器 - 基本上,IE是单向的,而其他人则是另一种方式。

// 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);
  }
}