使用javascript调用webservice示例
- 格式:docx
- 大小:28.89 KB
- 文档页数:16
调用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的功能,它可以帮助我们更好地构建客户端/服务器端通信环境,让客户可以实时调用服务器端接口,实现我们想要的功能,方便地实现我们服务器与客户端之间的交互和通信。
【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方法随着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上一篇谈到从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的汇集&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的方法一、带参数的方法<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接口是一个用于数据交互的网络服务,其接口通常使用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的方法以及一些注意事项。
## 一、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来进行身份验证和授权。
Js 调用WebService心得总结页面:<INPUT type="button" value="Button" onclick="getdata()"><br><span id="div1" class="list"></span> <script language=javascript>setInterval(getdata,1000); //动态定时调用</script>脚本: <SCRIPT ID="clientEventHandlersJS" LANGUAGE="javascript">function getdata(){var index=0;docSubmit =new ActiveXObject("Microsoft.XMLDOM");docSubmit.async = false;docSubmit.load("http://localhost/WebApplication1/Service1.asmx/GetData?maxval=5");docSubmit.loadXML(docSubmit.xml.replace(/</g,"<").replace(/>/g,">"));var s="";nodeList=docSubmit.documentElement.getElementsByTagName("ds");for (i=0;i<nodeList.length;i++){s=s+nodeList(i).selectSingleNode("KeShimch").text+'<br>';}div1.innerHtml ="";div1.innerHTML=s;div1.style.visibility="visible";}</script> //如果返回是个字符串: <SCRIPT ID="clientEventHandlersJS" LANGUAGE="javascript"> function chang(){docSubmit =new ActiveXObject("Microsoft.XMLDOM");docSubmit.async = false;docSubmit.load("http://localhost/Advertisement/ADService.asmx/GetADCode?ADID=1");var s=docSubmit.documentElement.text;window.alert(s);td_AD.innerHTML=s;}//setInterval(chang,2000);//间隔执行</script> 注意:在和是有区别的,在的machine.config (C:\WINNT\\Framework\v1.1.4322\CONFIG),默认webservice去除了post,get方法你可在你的machine.config 中加上或者只在webServices 项目的Web.config 的<system.web>里加上:<webServices><protocols><add name="HttpPost" /><add name="HttpGet" /></protocols></webServices>否则,在ie地址栏输入webServices 访问地址串时,提示:请求格式无法识别。
篇《深入理解webservice客户端调用例子》一、引言在当今信息化时代,互联网技术的应用范围越来越广,web服务作为一种轻量级的网络服务技术,以其跨评台、松耦合、互操作性等特点,被广泛应用于各类系统集成和业务应用中。
而webservice客户端调用作为web服务的重要组成部分,关系到系统之间的数据交换和业务协同,因此在实际应用中具有重要意义。
二、webservice客户端调用概述webservice客户端调用是指一个系统(客户端)通过webservice协议向另一个系统(服务端)发送请求并接收响应的过程。
在实际应用中,一般包括以下几个步骤:1. WSDL文件分析与理解客户端需要获取服务端的WSDL文件,该文件描述了服务端所提供的服务及其相关信息。
客户端需要对WSDL文件进行分析与理解,以便了解如何构造请求消息和解析响应消息。
2. 构造请求消息在了解了WSDL文件后,客户端需要按照约定的消息格式,构造相应的请求消息。
这包括消息的头部、消息体等内容,通常需要使用SOAP协议进行消息封装和传输。
3. 发送请求并接收响应客户端发送构造好的请求消息到服务端,等待服务端的响应。
在这个过程中,客户端需要注意错误处理、超时设置等问题,以保证通信的可靠性和稳定性。
4. 解析响应消息客户端需要对服务端返回的响应消息进行解析,提取所需的数据并进行相应的处理。
这一过程通常涉及到XML解析、数据转换等操作。
以上过程简要描述了webservice客户端调用的基本流程,但实际情况下可能还会涉及到安全认证、日志记录、性能优化等问题。
三、webservice客户端调用例子为了更好地理解webservice客户端调用的过程,我们以一个具体的例子来说明。
假设我们有一个名为"StockService"的web服务,提供了查询股票信息的功能,我们希望通过一个客户端程序来调用该服务并获取股票信息。
1. 分析WSDL文件我们需要获取StockService的WSDL文件,并对其进行分析。
js调用webservice方法1. 介绍Web服务是一种通过网络进行通信的跨平台应用程序接口(API)。
JavaScript是一门在客户端运行的脚本语言,可以通过调用Web服务的方法来实现与服务器之间的交互。
本文将深入探讨如何使用JavaScript调用Web服务的方法。
2. Web服务概述Web服务是一种通过Web协议进行通信的软件系统。
它通过使用标准的HTTP协议来提供互操作性和平台无关性,使不同平台上的应用程序能够相互通信。
Web服务通常使用XML(eXtensible Markup Language)来进行数据交换,可以在任何操作系统、编程语言和开发工具之间进行通信。
Web服务通常由两个主要组件组成:1.服务提供者:负责提供Web服务的服务器端应用程序。
它会将功能封装成可用的Web方法,并通过Web协议和通信协议进行暴露。
2.服务消费者:负责调用Web服务的客户端应用程序。
它会通过发送HTTP请求并接收HTTP响应来与服务提供者进行通信。
3. JavaScript调用Web服务的方法JavaScript通过HTTP请求实现与Web服务的通信。
它可以使用以下方法之一来调用Web服务:a. XMLHttpRequest对象XMLHttpRequest对象是JavaScript中的核心对象之一,用于在后台与服务器进行数据交换。
它能够实现异步数据传输,无需刷新整个页面。
调用Web服务的一般步骤如下:1.创建XMLHttpRequest对象。
var xhr = new XMLHttpRequest();2.设置请求方法和URL。
xhr.open('POST', ' true);3.设置请求头信息。
xhr.setRequestHeader('Content-Type', 'application/json');4.设置响应处理函数。
xhr.onload = function() {// 响应处理逻辑};5.发送请求并传递参数。
一、介绍Vue3Vue3是一种用于构建用户界面的现代化JavaScript框架。
它具有响应式数据绑定和可组合式的API,使得开发者可以更加轻松地编写复杂的前端应用程序。
在Vue3中,与后端服务进行交互是非常常见的需求。
为了满足这一需求,Vue3提供了WebService接口调用的原理。
二、WebService接口调用的基本原理1. 概念WebService是一种基于网络的应用程序接口,可通过网络来传输数据。
在Vue3中,开发者可以利用这一接口对后端服务进行调用,以实现数据的传输和交互。
2. 工作原理在Vue3中,使用WebService接口进行数据交换的基本原理如下:- 发起请求:前端代码通过HTTP协议向后端服务端发起请求,请求的内容可以包括URL、请求方法、请求头和请求体等信息。
- 接收响应:后端服务端接收到前端发起的请求后会进行处理,并返回相应的数据,通常是通过JSON格式返回给前端。
- 处理响应:一旦前端收到后端服务端返回的数据,就可以根据需要进行相应的处理,例如展示数据、更新界面等等。
3. 实现方式在Vue3中,实现WebService接口调用的方式包括但不限于以下几种:- 使用内置的fetch API进行网络请求- 使用第三方库如axios进行网络请求- 使用WebSocket进行实时通讯三、Vue3的WebService接口调用示例下面以使用axios库进行WebService接口调用为例,演示Vue3中WebService接口调用的具体实现。
1. 安装axios库需要在项目中安装axios库,可以通过npm或yarn进行安装:```bashnpm install axios```2. 创建接口请求在Vue3的组件中,可以通过以下代码创建对后端服务的接口请求:```javascriptimport axios from 'axios';export default {methods: {fetchData() {axios.get('xxx.then(response => {this.data = response.data;}).catch(error => {console.error(error);});}}};```在上述代码中,我们使用axios库发起了一个GET请求,请求的URL 为xxx。
js webservice方法使用JavaScript编写WebService方法在Web开发中,JavaScript(简称JS)是一种常用的脚本语言,可以用于实现与Web服务器之间的数据交互。
通过使用WebService方法,我们可以在客户端使用JavaScript调用服务器上的函数,并接收返回的数据。
下面是一个示例代码,演示了如何使用JavaScript编写WebService方法。
首先,我们需要创建一个WebService文件,可以是一个包含服务器端代码的文件(如中的.asmx文件),也可以是一个API端点(如REST API)。
在这个文件中,我们可以定义需要被调用的函数和相应的参数。
```javascript// 示例WebService文件(webService.js)// 导出的函数将被JavaScript调用exports.calculateSum = function (a, b) {return a + b;};exports.getUserInfo = function (userId) {// 从数据库或其他数据源获取用户信息var user = {id: userId,name: "John Doe",age: 25return user;};```接下来,我们需要在客户端(如网页)上编写JavaScript代码,以调用服务器上的WebService方法,并处理返回的数据。
```javascript// 客户端JavaScript代码// 使用XMLHttpRequest对象发起HTTP请求var xhr = new XMLHttpRequest();// 指定HTTP请求的方法、URL和异步标志(此处假设WebService文件位于根目录下)xhr.open("GET", "/webService.js?method=getUserInfo&userId=123", true);// 定义请求完成时的回调函数xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200) {// 从服务器返回的响应中获取数据var response = JSON.parse(xhr.responseText);// 处理返回的数据console.log();console.log(response.age);};// 发送HTTP请求xhr.send();```在上述示例中,我们使用了XMLHttpRequest对象来发送HTTP请求,向服务器发起调用getUserInfo函数的请求,并传递了参数userId = 123。
使用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>。