使用javascript调用webservice示例
再javascript中使用soap调用webservice的示例代码
代码再IE6和FF测试通过,对于c#写的webservice和java(xfire)写的,都测试过,没有问题
此代码原型来源于 www.guru4/ 的javascript soapclient
发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c#
(再例子中使用的 mootools.v1.11.js 文件,做过修改)
客户端js调用代码如下
js 代码
1.function ajaxRequest()   
2.    {   
3.        var url = "localhost:88/webservicedemo.asmx";   
4.           
5.        //设置webService传入参数  
6.        //  
7.        //注意:  
8.        //  
9.        //    调用.Net 写的webservice(如例子中的webservicedemo.asmx)  
10.        //            HelloTo(String name)    针对name参数必须写成 wqj,还有更多参数一样写,使用名称匹配  
11.        //            传入的参数数量可以不等于(多于或少于)方法要求的参数  
12.        //  
13.        //    调用java(xfire) 发布的webService  
14.        //            传入的参数必须与调用方法的参数数量相等,且按传入值的顺序进行匹配  
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 = new WebService(url,"HelloTo",op);   
27.        quest();   
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 返回的XML  
39.        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: pty,   
13.        pty,   
14.        evalScripts: false,   如何下载javascript
15.        evalResponse: false 
16.    },   
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 = sponseXML;   
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.NamedItem("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=\"/soap/envelope/\">" +   
49.                "" +   
50.                "<" + this.method + " xmlns=\"" + ns + "\">" +   
51.                      (this.options.data === null ?"":this.options.data) +   
52.                " + this.method + ">;   
53.           
54.        this.hod = 'post';   
55.        this.options.data = null;   
56.           
57.        var soapaction = ((ns.lastIndexOf("/") != ns.length - 1) ? ns + "/" : ns) + this.method;   
58.           
59.        var soapAjax = new Ajax(this.url,this.options);   
60.        soapAjax.setHeader("SOAPAction", soapaction);   
61.        soapAjax.setHeader("Content-type", "text/xml; charset=utf-8");   
62.        quest(sr);   
63.    }   
64.       
65.}); 
在第一个版本中存在以下问题
1. 不能根据webservice的要求输入参数自动组织参数
2. 没有处理返回值
3.一旦webservice调用过程出错,会形成一个死循环(一直弹出error)
V2 说明
1. 解决第一版中死循环的问题
2. 统一输入参数的传入形式(与mootools的ajax使用方式完全一致),形式如name=wqj&age=20&........
3. 自动根据参数名对应的值,组织webservice的传入参数,只根据webservice要求的参数名查对应的值
    与顺序不再有关系.(对于xfire中的输入参数使用名称 )
    传入的参数数量也不再要求一致,多的自动丢弃,少的自动传空
4. 对于返回的XML,增加提取方法,返回需要的关键返回值(去掉XML的框框)
详细参照附件源码,下面是部分关键代码
JavaScriptSOAP.rar (47.1 KB)
描述: js调用webservice示例
下载次数: 443
JavaScriptSOAP(V2).rar (49.5 KB)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。