使用javascript调用webservice

来源:互联网 发布:破解软件网站大全 编辑:程序博客网 时间:2024/05/22 12:09

在项目过程中遇到了在html中调用webservice的情况,由于Ajax不能跨域,而且后台那边也没有给测试环境,就自己先搭了个简易的webservice,想模拟下从html中调看能调出来么?

结果很蛋疼,wsdl能拿到,但是直接访问方法就报500,不管方法是有参还是无参都会报错,仔细检查后看到tomcat上提示no SOAPAction header,没有SOAP头。。。后来看到了pignut_wang写的http://www.iteye.com/topic/98182这篇文章,太精髓了,赶紧拿来试试,果然行了。在此感谢pignut_wang的分享。

写在前面:

由于我的webservice返回的XML与pignut_wang文中提到的webservice返回的XML在内容上不太一样,测试中有点小问题,所以我对pignut_wang提供的webservice.js文件做了点小修改

代码在IE6和FF测试通过,对于c#和java(xfire)写的webservice,都测试通过

此代码原型来源于 http://www.guru4.net/ 的javascript soapclient

发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c#

(在例子中使用的 mootools.v1.11.js 文件,做过修改)

首先,下载pignut_wang提供的JavaScriptSOAP(V2).rar

解压后将WebService.js和mootools.v1.11.js放在webservice项目下。

然后在需要调webservice服务的页面中引用这两个JS文件,并在页面中加入请求代码:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<script type="text/javascript">
    var service ;
    function ajaxRequest()
    {
        var url = "http://localhost:8088/WebServiceProject/services/TestString";
        //设置webService传入参数
        //
        //注意:
        //
        //    调用webservice(如例子中的webservicedemo.asmx)
        //           HelloTo(String name)   针对name参数必须写成name=wqj ,还有更多参数一样写,使用&符号分隔(name=11&age=20&.....),使用名称匹配
        //           传入的参数数量可以不等于(多于或少于)方法要求的参数
          
          
        var para = "name=tinyRed";
          
        var op = {
                    data:para,
                    onComplete: showResponse,
                    onFailure:showError,
                    update:'ajaxBackname'
                 };
  
        service = new WebService(url,"hello",op);
        service.request();
        return false;
    }
    function showError(obj)
    {
        //obj 是一个xmlHttpRequest对象
        alert("error");
    }
    function showResponse(requestText,requestXML)
    {
        //requestText 返回的文本
        //requestXML 返回的XML
        alert(service.getBackData(requestXML));
        //alert(requestXML);
    }
    </script>

最后,只要在需要调服务的时候调用ajaxRequest函数就可以了,不过这个函数里面的参数是要自己事先填好的哦。

0 0