使用Javascript使用Web服务

使用Javascript使用Web服务,javascript,web-services,Javascript,Web Services,有没有一种使用JavaScript使用web服务的方法?我正在寻找一种内置的方法来实现它,使用JavaScript框架不是一个选项 您可以使用该对象,但由于您不想使用任何JavaScript框架,您必须自己封送和解封SOAP信封。如果服务托管在您的域中,则可以创建一个。如果没有,您将遇到跨域问题。您可以使用JavaScript使用XmlHttpRequest对象本机使用web服务。但是,不同浏览器对该对象的实例化有所不同。例如,Firefox和IE7+允许您将其实例化为本机JavaScript对

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

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

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

您可以使用JavaScript使用XmlHttpRequest对象本机使用web服务。但是,不同浏览器对该对象的实例化有所不同。例如,Firefox和IE7+允许您将其实例化为本机JavaScript对象,但IE6要求您将其实例化为ActiveX控件

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

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

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


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

另请查看有关使用XMLHttpRequest对象的详细信息页面。

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

这很有效。它很旧(检查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);
  }
}
//javascript全局变量
var soapHeader=''
+ ''
+ ''
+ '';
var soapFooter=''
+ '';
var destinationURI='/webservices/websalm';
var actionURI='';
函数callWebService(nsCallback、ieCallback、parms){
尝试
{
//为当前浏览器=Netscape或IE创建XmlHttpRequest obj
if(navigator.userAgent.indexOf('Netscape')!=-1)
{
SOAPObject=新的XMLHttpRequest();
SOAPObject.onload=nsCallback;
}否则{//IE
SOAPObject=newActiveXObject('Microsoft.XMLHTTP');
SOAPObject.onreadystatechange=ieCallback;
}
open('POST',destinationURI,true);
//根据浏览器设置2个请求头
如果(actionURI=''){
setRequestHeader('SOAPAction','\'\');
}else{SOAPObject.setRequestHeader('SOAPAction',actionURI);
}
setRequestHeader('Content-Type','text/xml');
//从输入参数+全局变量组合请求正文
var requestBody=soapHeader+parms+soapFooter
//发送,基于浏览器
if(navigator.userAgent.indexOf('Netscape')!=-1)
{
send(新的DOMParser().parseFromString(requestBody,'text/xml');
}否则{
发送(请求主体);
}
}捕获(E)
{
警报('callWebService异常:'+E);
}
}

s/can/will/如果我没弄错的话。是的,你是对的。每当跨域的东西出现时,我就有点不确定确切的规则是什么。我只是尽量避免这些问题;)你所说的“跨域问题”是什么意思?如果是SOAP Web服务,你只需要担心SOAP信封。一些restful web服务可以在不进行任何预处理的情况下被调用并读取结果。在XHR成为语言的特色之前,JavaScript能够调用web API/服务吗?或者直到那时,它只用于HTML页面中的DOM操作吗?只是好奇而已。在XHR被引入语言之前,JavaScript能够调用web API/服务吗?或者直到那时,它只用于HTML页面中的DOM操作?