使用javascript调用webservice示例

合集下载

调用webservice的几种方式

调用webservice的几种方式

调用webservice的几种方式webservice是一种服务,它可以让不同类型的应用程序通过网络交换数据和信息,通过联网,客户可以与服务器端通信,而服务器端可以生成一些特定的网络服务。

webservice使得手机端客户可以实时调用服务器端的接口,从而获取相应的资源和信息,也就是说客户和服务器端之间的计算机网络协议可以实现webservice方式的交互。

通常情况下,webservice有几种不同的实现方式。

下面简单介绍几种可以实现webservice的方式。

1. 使用Axios或低层Javascript原生api发起HTTP请求。

Axios是一个支持浏览器和node.js的客户端框架,用来发起http请求。

它可以实现前后端数据交互,实现webservice。

2. 使用传统soap协议发起HTTP请求。

soap(simple object access protocol)是一种基于XML的协议,它可以通过HTTP使得应用程序交互,它可以使用简单的消息来交互数据,而不用编写特定的代码。

3. 使用REST协议发起HTTP请求。

REST协议是一种使用RESTful API的软件设计架构,它是用来构建及交互分布式系统的一种设计方法。

4. 使用JSON API发起HTTP请求。

JSON API是一种用以支持数据并行关系的API,可以让JSON数据分发,并且提供资源定位、数据多态、查询、及内容引用等功能,从而构建实现交互的webservice系统。

5. 使用gRPC发送HTTP请求。

gRPC是一种开放源的远程过程调用(RPC)系统,可以通过http2发起请求。

它的实现允许你在任何语言之间实现客户端/服务器端通信,以及实现webservice功能。

以上就是实现web service的几种方式,它们可以帮助我们将不同的应用程序通过网络交换数据和信息,实现webservice的功能,它可以帮助我们更好地构建客户端/服务器端通信环境,让客户可以实时调用服务器端接口,实现我们想要的功能,方便地实现我们服务器与客户端之间的交互和通信。

Myeclpse6.0+Axis2 返回对象数组(List)的webservice例子

Myeclpse6.0+Axis2 返回对象数组(List)的webservice例子

【wayfoon】最近公司要求实现一个webservice调用,之前也接触过,但只是看看,没有动手试试,于是现在正式开始学习webservice。

之前参照网上的例子写了一个简单的say hello webservice例子。

传递的对象是string,而且只有一个方法;但实际应用中,需要传递一些复制的对象,比如:数组,集合,对象数组。

由于webservice 是通过xml来交互数据的,而且是不分平台的。

因此,java 中的List等集合类的哦是通过数组来实现的。

学习webservice最好不要从一种语言的角度(java、c#)来对待问题,如果非要看成一中语言,那看成是c语言吧。

简单的hello world 例子见/mlzry0612/articles/185209.html?opt=admin里面有详细的axis+myeclipse5.5安装部署,图文并茂。

不同myeclipse版本有所不同。

在演示例子前,你必须已经安装好了Axis,并且已经知道怎样使用axis,知道通过wsdl生成webservice代码和生成aar发布文件。

不会的话,先学习前面的hello 例子。

下面演示一个比较复杂的例子。

例子实现:输入一个string 返回得到一个对象数组(输入里面所有的元素对象),注意是对象数组。

每个对象对应一个bean 实体。

使用axis的好处是可以根据wsdl自动生成大部分代码。

因此,采用axis开发webservice 的实现关键在于生成wsdl文件的编写。

生成wsdl文件可以采用两种方式:第一种:直接新建wsdl再通过wsdl设计器来设计(也就是hello例子里面将的)如果你对wsdl不是很熟悉,而且,输入或输出的参数都非常复杂,不清楚输入输出的组成结构时,你可以采用第二种方法。

这种方式,可以让你使用你最熟悉的语言来表达你的意思。

以java为例,你可以将对个对象放到List里面来表达你要输出的值,这个在 wsdl里面是另外一种表达方式(没有List)。

js调用webservice方法

js调用webservice方法

js调用webservice方法随着Web应用程序的日益普及,越来越多的应用场景需要前端JS 与后端webservice进行交互,而JS调用webservice方法已成为了一种高效方便的方法。

下面我们就详细介绍一下如何进行JS调用webservice方法。

一、什么是webservice?我们想要调用webservice方法,首先需要了解什么是webservice。

Webservice是一种基于网络的应用程序,它是一组远程方法调用的集合,可以跨越各种网络和操作系统平台进行交流。

我们可以用webservice将两个应用程序集成到一个完整的解决方案中,互相交互和传递数据。

二、JS调用webservice的实现JS调用webservice方法的实现主要分为以下两步:1、编写webservice接口:需要使用C#或Java等语言编写webservice的服务端程序,暴露对外的接口。

2、调用webservice接口:在JS中编写代码,通过AJAX的方式调用服务端webservice接口进行远程调用,从而实现数据的传输和交互。

三、具体实现步骤1、编写webservice接口代码:在这里,我们以C#为例来说明如何编写webservice的服务端代码,具体流程如下:① 创建一个Web应用程序项目,选择C#语言,命名为“WebServiceTest”;② 在解决方案中添加一个web service的项,命名为“DemoWebService.asmx”,该项会自动生成代码文件;③ 接着在代码文件中添加需要公开的方法,例如以下代码:[WebMethod]public string GetStr(string name){return "Hello! " + name + " is calling me.";}到这里,服务端的webservice接口就编写完毕了。

2、在JS中调用webservice接口:在编写JS代码时,主要通过AJAX的方式进行调用,流程如下:① 创建一个XMLHttpRequest对象,通过该对象来产生异步请求,例如以下代码:var xmlhttp = null;if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}② 创建请求地址和参数,例如以下代码:var url ="http://localhost/WebServiceTest/DemoWebService.asmx/GetStr"; var data = "name=" + encodeURIComponent("Tom");③ 配置请求头信息和请求体内容,例如以下代码:xmlhttp.open("POST", url, true);xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");xmlhttp.send(data);④用xmlhttp对象的onreadystatechange方法来检测服务器返回结果,获取调用结果的返回值,例如以下代码:xmlhttp.onreadystatechange = function() {if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {var result = xmlhttp.responseText;alert(result);}}如此一来,JS调用webservice的流程就完成了。

从JavaScript中发送数据到WebService

从JavaScript中发送数据到WebService

JavaScript发送数据到WebService上一篇谈到从WebService获取数据到JavaScript,在js端可用DOM方式和jQuery对象方式来处理结果。

该篇我们来谈谈从JavaScript发送数据到WebService,重点强调两个方面1. 如何传递数据到WebService中2. 在WebService中如何接受数据,不同的接受形式如何处理从客户端传递数据到服务器,无外乎两种情况:其一,传递一个一个但个数据,比如:一个字符串,一个整数,或多个字符串变量其二,发送对象型数据,即在服务器端接受数据后需要构建一个或多个实体对象的情况以下用两个JavaScript函数分别来说明显示方式1.传递单个数据,js函数如下://传递一个字符串,可扩展到任何多个字符串$("#sendString").click(function () {$.post("WebServices/MyWebService.asmx/GetString",{ "str": "你好,大家好!" }, function (r) {alert($(r).text());});});WebService的GetString方法如下:[WebMethod]public bool GetString(string str) {//做个简单的运算,说明str接收到了数据return str.Length > 5;}2. 传递对象型数据。

在js不能构建C#的对象,要表示对象,在js中必须用JSON字符串,所以要传递对象或对象数组到服务器,只要传递JSON格式的字符串就可以了,如下面的方法,传递了两个User(针对服务器端而言)对象的数据到服务器端。

$("#sendJson").click(function () {$.ajax({type: "post",url: "WebServices/MyWebService.asmx/InputJsonObjects",data: '{"users": [{ "Id": "S001", "Name": "阿牛", "Age": 20 }, { "Id":"S002", "Name": "阿朱", "Age": 18}] }',dataType: "json",//必须是json,且不能缺少contentType: "application/json",//必须的success: function (result) {alert(result.d);},error: function (e) {alert(e.responseText);}});});WebService的InputJsonObjects方法如下:///<summary>///获得从客户端传来的Json格式的User对象信息///用数组直接接收///</summary>///<param name="users"></param>///<returns></returns>[WebMethod]public string InputJsonObjects(User[] users) {string name=null;if (users!=null && users.Length>0) {name = users[0].Name;//获得第一个对象的name属性值}return name;//向客户端一个name,证明服务器接收到数据了,没别意思,呵呵。

Javascript调用Webservice的汇集&nbs

Javascript调用Webservice的汇集&nbs

Javascript调用Webservice的汇集&nbsusing System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;[webservice(namespace=“/”)] [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] public class Service:System.Web.Services.WebService{public Service(){//uncomment the following line if using designed components//InitializeComponent();}[webmethod]public string SayHelloTo(string Name){return“Hello”+Name;}}还是俗了点。

:)2.js调用webservice+xmlhttp的实现部分。

<html><title>Call webservice with javascript and xmlhttp.</title><body><script language=“javascript”>//test function with get method.function RequestByGet(data){var xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);//Webservice location.varURL=“http://localhost:1323/WebSite6/Service.asmx/SayHelloTo?Name=Zach”;xmlhttp.Open(“GET”,URL,false);xmlhttp.SetRequestHeader(“Content-Type”,“text/xml;charset=utf-8”);xmlhttp.SetRequestHeader(“SOAPAction”,“/SayHelloTo”);xmlhttp.Send(data);var result=xmlhttp.status;//OKif(result==200){document.write(xmlhttp.responseText);}xmlhttp=null;//test function with post methodfunction RequestByPost(value){var data;data=''<?xml version=“1.0”encoding=“utf-8”?>'';data=data+''<soap:Envelope xmlns:xsi=“/2001/XMLSchema-instance”xmlns:xsd=“/2001/XMLSchema”xmlns:soap=“/soap/envelope/”>'';data=data+''<soap:Body>'';data=data+''<SayHelloTo xmlns=“/”>'';data=data+''<Name>''+value+''</Name>'';data=data+''</SayHelloTo>'';data=data+''</soap:Body>'';data=data+''</soap:Envelope>'';var xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);var URL=“http://localhost:1323/WebSite6/Service.asmx”;xmlhttp.Open(“POST”,URL,false);xmlhttp.SetRequestHeader(“Content-Type”,“text/xml;charset=gb2312”);xmlhttp.SetRequestHeader(“SOAPAction”,“/SayHelloTo”);xmlhttp.Send(data);document.write(xmlhttp.responseText);</script><input type=“button”value=“CallWebserviceByGet”onClick=“RequestByGet (null)”><input type=“button”value=“CallWebserviceByPost”onClick=“RequestByPost(‘'Zach'’)”></body></html>对于使用post方法需要发送的那堆东东可以在webservice的测试页面中找到,自己拼凑加上对应的参数就可以。

JavaScript调用WebService的方法

JavaScript调用WebService的方法

JavaScript调用WebService的方法一、带参数的方法<script type ="text/javascript" >function PostRequestData(URL, data){var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.Open("POST", URL, false);xmlhttp.SetRequestHeader("Content-Type", "text/xml; charset=utf-8");xmlhttp.SetRequestHeader("SOAPAction", "");xmlhttp.setRequestHeader("Content-Length", data.length);try{xmlhttp.Send(data);var result = xmlhttp.status;}catch(ex){return("0" + ex.description + "|" + ex.number);}if (result == 200){return(xmlhttp.responseT ext);}xmlhttp = null;}function ServiceCall(){var r;var data;var url = 'http://localhost:2119/js%E8%B0%83%E7%94%A8Webservice/S ervice1.asmx';data = "<?xml version='1.0' encoding='utf-8'?>";data = data + '<soap:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soap="/soap/envelope/">';data = data + "<soap:Body>";data = data + '<HelloWorld xmlns="" />';data = data + "</soap:Body>";data = data + "</soap:Envelope>";r = PostRequestData(url, data);document.getElementById("data").innerHTML = r;}</script>二、带参数的方法function PostRequestData(URL, data){var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.Open("POST", URL, false);xmlhttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length", data.length);try{xmlhttp.Send(data);var result = xmlhttp.status;}catch(ex){return("0" + ex.description + "|" + ex.number);}if (result == 200){return(xmlhttp.responseT ext);}xmlhttp = null;}function ServiceCall(a,b){var r;var data;var url = 'http://localhost:2119/js%E8%B0%83%E7%94%A8Webservice/S ervice1.asmx/Add';data = "a="+a+"&b="+b;r = PostRequestData(url, data);document.getElementById("data").innerHTML = r;}</script>。

webservice接口调用示例

webservice接口调用示例

webservice接口调用示例WebService接口是一个用于数据交互的网络服务,其接口通常使用HTTP或HTTPS方式调用。

以查询天气信息为例,下面是一个使用WebService接口调用的示例:1. 首先,我们需要获取天气查询接口的地址和参数。

这些信息通常可以在接口提供方的文档中找到。

2. 我们可以使用类似cURL、Python的requests库等工具来发送HTTP请求。

以requests库为例,我们可以在代码中添加如下语句导入requests库:```import requests```3. 接下来,我们需要发送HTTP GET请求获取天气信息。

代码示例如下:```url = '/currentconditions/v1/'payload = {'apikey': 'YOUR_API_KEY', 'location': 'beijing'} response = requests.get(url, params=payload)```4. 上述代码中,我们指定了接口的地址`url`和查询参数`payload`。

此外,我们还需要向接口提供方获取一个API Key,以便进行认证。

5. 接下来,我们可以通过解析服务端响应中的JSON数据获取天气信息。

代码示例如下:```data = response.json()weather_info = data[0]['WeatherText']temperature = data[0]['Temperature']['Metric']['Value']```6. 上述代码中,我们将服务端响应中的JSON数据解析,并获取其中的天气信息和温度信息。

7. 最后,我们可以将结果展示给用户或者进行其他处理。

```result = '北京的天气为{},温度为{}度'.format(weather_info, temperature)print(result)```请注意,上述代码仅为示例,实际的WebService接口调用可能需要进行更多的参数配置和错误处理。

常用调用webservice的方法

常用调用webservice的方法

常用调用webservice的方法全文共四篇示例,供读者参考第一篇示例:在现今的软件开发领域中,调用Webservice已经成为一种常见的做法。

Webservice是一种通过网络进行数据交换的技术,可以让应用程序在不同的机器之间进行通信,使得不同的系统可以共享数据和功能。

在本文中,我们将介绍一些常用的调用Webservice的方法以及一些注意事项。

## 一、SOAP协议SOAP(Simple Object Access Protocol)是一种通用的传输协议,可以通过HTTP进行数据交换。

在调用Webservice时,我们可以使用SOAP协议来进行数据交互。

通常情况下,我们可以使用SOAP客户端来发送SOAP请求并接收返回的SOAP响应。

```javaimport javax.xml.soap.*;import java.io.*;## 二、RESTful API```javaimport java.io.BufferedReader;import java.io.InputStreamReader;import .HttpURLConnection;import .URL;## 三、使用开源库除了手动编写代码来调用Webservice,我们还可以使用一些现成的开源库来简化这个过程。

Apache CXF是一个流行的Webservice框架,它提供了丰富的API和工具来帮助我们开发和调用Webservice。

HelloWorld client = (HelloWorld) factory.create();String result = client.sayHello("world");System.out.println(result);}}```## 四、安全注意事项在调用Webservice时,我们也需要考虑安全因素。

我们可以使用HTTPS来保护数据的传输安全,可以使用WS-Security来保护数据的机密性和完整性,还可以使用OAuth来进行身份验证和授权。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用javascript调用webservice示例再javascript中使用soap调用webservice的示例代码代码再IE6和FF测试通过,对于c#写的webservice和java(xfire)写的,都测试过,没有问题此代码原型来源于/的javascript soapclient发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c#(再例子中使用的mootools.v1.11.js 文件,做过修改)客户端js调用代码如下js 代码1.function ajaxRequest()2. {3.var url ="http://localhost:88/webservicedemo.asmx";4.5.//设置webService传入参数6.//7.//注意:8.//9.// 调用.Net 写的webservice(如例子中的webservicedemo.asmx)10. // HelloTo(Stringname) 针对name参数必须写成 wqj,还有更多参数一样写,使用名称匹配11. // 传入的参数数量可以不等于(多于或少于)方法要求的参数12. //13. // 调用java(xfire) 发布的webService14. // 传入的参数必须与调用方法的参数数量相等,且按传入值的顺序进行匹配15. //16.17. var para = "wqj"; 这里应该是一个标准的xml形式,源码贴出来时被虑掉了,请参看附件源码18.19. var op = {20. data:para,21. onComplete:showResponse,22. onFailure:showError,23. update:'ajaxBack'24. };25.26. var service = newWebService(url,"HelloTo",op);27. service.request();28. return false;29. }30. function showError(obj)31. {32. //obj 是一个xmlHttpRequest对象33. alert("error");34. }35. function showResponse(requestText,requestXML)36. {37. //requestText 返回的文本38. //requestXML 返回的XML39. alert("ok");40. }WebService类的代码如下(webservice.js)js 代码1.var WSDLS = {};2.3.var WebService = new Class({4.5. url : '',6. method : '',7. options:8. {9. method:'GET',10. data: null,11. update: null,12. onComplete: Class.empty,13. onError:Class.empty,14. evalScripts: false,15. evalResponse: false16. },17.18. initialize: function(url,method,options)19. {20. this.url = url;21. this.method = method;22. this.options = options;23.24. },25.26. request : function()27. {28. var wsdl = WSDLS[this.url];29. if(!wsdl)30. {31. var op = {method:'GET',async:false};32. var wsdlAjax = new XHR(op).send(this.url+ "?wsdl", null);33. wsdl =wsdlAjax.transport.responseXML;34. WSDLS[this.url] = wsdl;35. }36. this.setSoap(wsdl);37. },38.39. setSoap : function(wsdl)40. {41.42. var ns =(wsdl.documentElement.attributes["targetNamespace"] + "" =="undefined") ?wsdl.documentElement.attributes.getNamedItem("targetNamespace") .nodeValue :wsdl.documentElement.attributes["targetNamespace"].value;43. var sr =44. "" +45. ""46. "xmlns:xsi=\"/2001/XMLSchema-instance\" " +47. "xmlns:xsd=\"/2001/XMLSchema\" " +48. "xmlns:soap=\"http://schemas.xm/soap/envelope/\">" +49. "" +50. "<"+ this.method + " xmlns=\""+ns + "\">" +51. (this.options.data=== null ?"":this.options.data) +52. " + this.method + ">;53.54. this.options.method = 'post';55. this.options.data = null;56.57. var soapaction = ((stIndexOf("/") !=ns.length - 1) ? ns + "/" : ns) + this.method;58.59. var soapAjax = newAjax(this.url,this.options);60. soapAjax.setHeader("SOAPAction",soapaction);61. soapAjax.setHeader("Content-type", "text/xml;charset=utf-8");62. soapAjax.request(sr);63. }64.65.});在第一个版本中存在以下问题1. 不能根据webservice的要求输入参数自动组织参数2. 没有处理返回值3.一旦webservice调用过程出错,会形成一个死循环(一直弹出error)V2 说明1. 解决第一版中死循环的问题2. 统一输入参数的传入形式(与mootools的ajax使用方式完全一致),形式如name=wqj&age=20&........3. 自动根据参数名对应的值,组织webservice的传入参数,只根据webservice 要求的参数名查找对应的值与顺序不再有关系.(对于xfire中的输入参数使用名称in0,in1........)传入的参数数量也不再要求一致,多的自动丢弃,少的自动传空4. 对于返回的XML,增加提取方法,返回需要的关键返回值(去掉XML的框框)详细参照附件源码,下面是部分关键代码••JavaScriptSOAP.rar (47.1 KB)•描述: js调用webservice示例•下载次数: 443•JavaScriptSOAP(V2).rar (49.5 KB)•描述: js,sope第二版•下载次数: 761引用地址:/topic/98182代码再IE6和FF测试通过,对于c#写的webservice和java(xfire)写的,都测试过,没有问题此代码原型来源于/的javascript soapclient发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c#(再例子中使用的 mootools.v1.11.js 文件,做过修改)客户端js调用代码如下js 代码1.function ajaxRequest()2.{3.var url = "http://localhost:88/webservicedemo.asmx";4.5.//设置webService传入参数6.//7.//注意:8.//9.// 调用.Net 写的webservice(如例子中的webservicedemo.asmx)10. // HelloTo(String name)针对name参数必须写成<name></name>wqj,还有更多参数一样写,使用名称匹配11. // 传入的参数数量可以不等于(多于或少于)方法要求的参数12. //13. // 调用java(xfire) 发布的webService14. // 传入的参数必须与调用方法的参数数量相等,且按传入值的顺序进行匹配15. //16.17. var para = "<name></name>wqj"; 这里应该是一个标准的xml形式,源码贴出来时被虑掉了,请参看附件源码18.19. var op = {20. data:para,21. onComplete: showResponse,22. onFailure:showError,23. update:'ajaxBack'24. };25.26. var service = new WebService(url,"HelloTo",op);27. service.request();28. return false;29. }30. function showError(obj)31. {32. //obj 是一个xmlHttpRequest对象33. alert("error");34. }35. function showResponse(requestText,requestXML)36. {37. //requestText 返回的文本38. //requestXML 返回的XML39. alert("ok");40. }WebService类的代码如下(webservice.js)js 代码1.2.var WSDLS = {};3.4.var WebService = new Class({5.6.url : '',7.method : '',8.options:9.{10. method:'GET',11. data: null,12. update: null,13. onComplete: Class.empty,14. onError:Class.empty,15. evalScripts: false,16. evalResponse: false17. },18.19. initialize: function(url,method,options)20. {21. this.url = url;22. this.method = method;23. this.options = options;24.25. },26.27. request : function()28. {29. var wsdl = WSDLS[this.url];30. if(!wsdl)31. {32. var op = {method:'GET',async: false};33. var wsdlAjax = new XHR(op).send(this.url + "?wsdl", null);34. wsdl = wsdlAjax.transport.responseXML;35. WSDLS[this.url] = wsdl;36. }37. this.setSoap(wsdl);38. },39.40. setSoap : function(wsdl)41. {42.43. var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElem ent.attributes.getNamedItem("targetNamespace").nodeValue : ws dl.documentElement.attributes["targetNamespace"].value;44. var sr =45. "" +46. ""47. "xmlns:xsi=\"/2001/XMLSchema-instance\" " +48. "xmlns:xsd=\"/2001/XMLSchema\" " +49. "xmlns:soap=\"http://schemas.xm/soap/envelope/\">" +50. "<soap:body>"</soap:body> +51. "<" + this.method + " xmlns=\"" + ns + "\">" +52. (this.options.data === null ?"":this.options.data) +53. " + this.method + ">;54.55. this.options.method = 'post';56. this.options.data = null;57.58. var soapaction = ((stIndexOf("/") !=ns.length - 1) ? ns + "/" : ns) + this.method;59.60. var soapAjax = new Ajax(this.url,this.options);61. soapAjax.setHeader("SOAPAction", soapaction);62. soapAjax.setHeader("Content-type", "text/xml;charset=utf-8");63. soapAjax.request(sr);65.66.});在第一个版本中存在以下问题1. 不能根据webservice的要求输入参数自动组织参数2. 没有处理返回值3.一旦webservice调用过程出错,会形成一个死循环(一直弹出error)V2 说明1. 解决第一版中死循环的问题2. 统一输入参数的传入形式(与mootools的ajax使用方式完全一致),形式如name=wqj&age=20&........3. 自动根据参数名对应的值,组织webservice的传入参数,只根据webservice 要求的参数名查找对应的值与顺序不再有关系.(对于xfire中的输入参数使用名称in0,in1........)传入的参数数量也不再要求一致,多的自动丢弃,少的自动传空4. 对于返回的XML,增加提取方法,返回需要的关键返回值(去掉XML的框框)详细参照附件源码,下面是部分关键代码WebService类的代码如下(webservice.js)js 代码1.var WSDLS = {};2.3.var WebService = new Class({4.5.url : '',6.method : '',7.options:9.method:'GET',10. data: null,11. update: null,12. onComplete: Class.empty,13. onError:Class.empty,14. evalScripts: false,15. evalResponse: false16. },17.18. initialize: function(url,method,options)19. {20. this.url = url;21. this.method = method;22. this.options = options;23. },24.25. request : function()26. {27. var wsdl = WSDLS[this.url];28. if(!wsdl)29. {30. var op = {method:'GET',async: false};31. var wsdlAjax = new XHR(op).send(this.url + "?wsdl", null);32. wsdl = wsdlAjax.transport.responseXML;33. WSDLS[this.url] = wsdl;34. }35.36. this.setSoap(wsdl);37. },38.39. setSoap : function(wsdl)40. {41. var paraXML = this.getParaXML(wsdl);42. alert(paraXML);43. var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElem ent.attributes.getNamedItem("targetNamespace").nodeValue : ws dl.documentElement.attributes["targetNamespace"].value;44. var sr =45. "" +46. " +47. "xmlns:xsi=\"/2001/XMLSchema-instance\" " +48. "xmlns:xsd=\"/2001/XMLSchema\" " +49. "xmlns:soap=\"http://schemas.xm/soap/envelope/\">" +50. "<soap:body>"</soap:body> +51. "<" + this.method + " xmlns=\"" + ns + "\">" +52. paraXML +53. " + this.method + ">";54.55. this.options.method = 'post';56. this.options.data = null;57.58. var soapaction = ((stIndexOf("/") !=ns.length - 1) ? ns + "/" : ns) + this.method;59.60. var soapAjax = new Ajax(this.url,this.options);61. soapAjax.setHeader("SOAPAction", soapaction);62. soapAjax.setHeader("Content-type", "text/xml;charset=utf-8");63. soapAjax.request(sr);64. },65. getParaXML : function(wsdl)66. {67.68. var objNode = null;69. var rtnValue = "";70. //java(xfire)71. var ell = this.getElementsByTagName(wsdl,"xsd:element");72. if(ell.length == 0)73. {74. //c#75. ell = this.getElementsByTagName(wsdl,"s:element");76. }77. for(var i = 0; i < ell.length; i++)78. {79. if(this.getElementAttrValue(ell[i],"name") == this.method)80. {81. objNode = ell[i];82. break;83. }84. }85.86. if(objNode == null) return rtnValue;87. //java(xfire)88. ell = this.getElementsByTagName(objNode,"xsd:element");89. if(ell.length == 0)90. {91. //c#92. ell = this.getElementsByTagName(objNode,"s:element");93. }94. if(ell.length == 0) return rtnValue ;95.96. var hash = new Hash();97.98. if(this.options.data != null && this.options.data.clean != "")99. {100.hash = this.options.data.split("&").toHash("=");101.}102.103.for(var i = 0; i < ell.length; i++)104.{105.var paraName = this.getElementA ttrValue(ell[i],"name");106.rtnValue = rtnValue + this.get SingleXML(paraName,hash);107.}108.109.return rtnValue;110.},111.112.getSingleXML : function (name,hash)113.{ = name.trim();116.var rtnValue = "";117.if(hash.hasKey(name))118.{119.rtnValue = hash.get(name); 120.}121.rtnValue = "<" + name + ">" + xmls cc(rtnValue) + " + name + ">"122.return rtnValue;123.},124.getBackData: function(xml)125.{126.var rtnValue = "";127.//java(xfire)128.var soap = this.getElementsByTagName(xm l,"ns1:out");129.if(soap.length == 0)130.{131.//c#132.soap = this.getElementsByTagName (xml,this.method + "Result");133.}134.return soap[0].childNodes[0].nodeValue;135.136.},137.getElementsByTagName : function(objNode,tagName)138.{139.//tagName 形式如xsd:element ,写出tag的全称140.141.var ell;142.if(this.isIE())143.{144.ell = objNode.getElementsByTagNa me(tagName);145.}146.else147.{148.if(tagName.contains(":")) tagName = tagName.split(":")[1];149.ell = objNode.getElementsByTagNa me(tagName);151.return ell;152.},153.getElementAttrValue : function(objNode,attrName)154.{155.var rtnValue = "";156.157.if(objNode == null) return rtnValue;158.159.if(objNode.attributes[attrName] + "" == "undefined")160.{161.if(objNode.attributes.getNamedItem (attrName) != null)162.rtnValue = objNode.attri butes.getNamedItem(attrName).nodeValue ;163.164.}165.else166.{167.if(objNode.attributes[attrName] != null)168.rtnValue = objNode.attri butes[attrName].value;169.}170.return rtnValue;171.},172.isIE : function()173.{174.var isMSIE = /*@cc_on!@*/false;175.return isMSIE;176.}177.});178.179.Array.extend({180.181.toHash : function (splitChar)182.{183.var hash = new Hash({});184.for(var i=0;i<this.length;i++)185.{186.187.if(this[i].split(splitChar).length == 1) contrnue;188.189.var key = this[i].split(splitCh ar)[0].trim();190.var value = this[i].split(split Char)[1].trim();191.192.hash.set(key, value);193.}194.195.return hash;196.}197.});198.199.function xmlscc(strData)200.{201.202.strData=strData.replace(/&/g, "&");203.strData=strData.replace(/>/g, ">");204.strData=strData.replace(/"<");205.strData=strData.replace(/"/g, """);206.strData=strData.replace(/'/g, "'");207.return strData;208.}相应的调用代码如下:js 代码1.<script type=< span="">"text/javascript">2.3.var service ;4.function ajaxRequest()5.{6.var url = "http://localhost:88/webservicedemo.asmx";7.8.//设置webService传入参数9.//10. //注意:11. //12. // 调用webservice(如例子中的webservicedemo.asmx)13. // HelloTo(String name)针对name参数必须写成name=wqj ,还有更多参数一样写,使用&符号分隔(name=11&age=20&.....),使用名称匹配14. // 传入的参数数量可以不等于(多于或少于)方法要求的参数15.16.17. var para = "name=wqj";18.19. var op = {20. data:para,21. onComplete: showResponse,22. onFailure:showError,23. update:'ajaxBack'24. };25.26. service = new WebService(url,"HelloTo",op);27. service.request();28. return false;29. }30. function showError(obj)31. {32. //obj 是一个xmlHttpRequest对象33. alert("error");34. }35. function showResponse(requestText,requestXML)36. {37. //requestText 返回的文本38. //requestXML 返回的XML39. // service.getBackData 就是取出返回的XML中,实际需要的数据40. //经过测试兼容IE,FF41. alert(service.getBackData(requestXML));42.43. }44. </script>。

相关文档
最新文档