代码之家  ›  专栏  ›  技术社区  ›  RWendi

使用JavaScript使用Web服务

  •  14
  • RWendi  · 技术社区  · 16 年前

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

    6 回复  |  直到 12 年前
        1
  •  17
  •   RobG    16 年前

    您可以使用XMLHttpRequest对象本机使用JavaScript来使用Web服务。但是,在不同的浏览器中实例化这个对象会有所不同。例如,firefox和ie 7+允许您将其实例化为本机javascript对象,但ie6要求您将其实例化为ActiveX控件。

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

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

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

    Wikipedia 有关xmlhttpRequest对象的详细信息。

        2
  •  5
  •   brien    16 年前

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

        3
  •  2
  •   Chris Vest    16 年前

    你可以使用 XMLHttpRequest 对象,但是由于您不想使用任何JavaScript框架,因此必须自己封送和取消封送SOAP信封。

        4
  •  0
  •   Aleris    16 年前

    也检查 XML HTTP Request 有关使用xmlhttpRequest对象的详细信息页。

        5
  •  0
  •   Pablo Cabrera    16 年前

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

        6
  •  0
  •   DOK    16 年前

    这是有效的。它是在所有Ajax工具出现之前编写的(检查Netscape)。你必须处理不同的浏览器——基本上是这样做的,其他人都是这样做的。

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