使用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小时内删除。
发表评论