导读:
时间: 2007-07-05 16:59 关键字: JavaScript soap,javascript
引用 收藏
再javascript中使用soap调用webservice的示例代码
代码再IE6和FF测试通过,对于c#写的webservice和java(xfire)写的,都测试过,没有问题
此代码原型来源于 http://www.guru4.net/的javascript soapclient
发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c#
(再例子中使用的 mootools.v1.11.js 文件,做过修改)
客户端js调用代码如下
js 代码
function ajaxRequest()
{
var url = "http://localhost:88/webservicedemo.asmx"
//设置webService传入参数
//
//注意:
//
// 调用.Net 写的webservice(如例子中的webservicedemo.asmx)
// HelloTo(String name) 针对name参数必须写成 wqj,还有更多参数一样写,使用名称匹配
// 传入的参数数量可以不等于(多于或少于)方法要求的参数
//
// 调用java(xfire) 发布的webService
// 传入的参数必须与调用方法的参数数量相等,且按传入值的顺序进行匹配
//
var para = "wqj" 这里应该是一个标准的xml形式,源码贴出来时被虑掉了,请参看附件源码
var op = {
data:para,
onComplete: showResponse,
onFailure:showError,
update:'ajaxBack'
};
var service = new WebService(url,"HelloTo",op);
service.request();
return false
}
function showError(obj)
{
//obj 是一个xmlHttpRequest对象
alert("error");
}
function showResponse(requestText,requestXML)
{
//requestText 返回的文本
//requestXML 返回的XML
alert("ok");
}
WebService类的代码如下(webservice.js)
js 代码
var WSDLS = {};
var WebService = new Class({
url : ',
method : ',
options:
{
method:'GET',
data: null,
update: null,
onComplete: Class.empty,
onError:Class.empty,
evalScripts: false,
evalResponse: false
},
initialize: function(url,method,options)
{
this.url = url;
this.method = method;
this.options = options;
},
request : function()
{
var wsdl = WSDLS[this.url];
if(!wsdl)
{
var op = {method:'GET',async: false};
var wsdlAjax = new XHR(op).send(this.url + "?wsdl", null);
wsdl = wsdlAjax.transport.responseXML;
WSDLS[this.url] = wsdl;
}
this.setSoap(wsdl);
},
setSoap : function(wsdl)
{
var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value;
var sr =
" " +
""
"xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" " +
"xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" " +
"xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">" +
"" +
"<"" +
(this.options.data === null ?"":this.options.data) +
" + this.method + ">
this.options.method = 'post';
this.options.data = null
var soapaction = ((ns.lastIndexOf("/") != ns.length - 1) ? ns + "/" : ns) + this.method;
var soapAjax = new Ajax(this.url,this.options);
soapAjax.setHeader("SOAPAction", soapaction);
soapAjax.setHeader("Content-type", "text/xml; charset=utf-8");
soapAjax.request(sr);
}
});
在第一个版本中存在以下问题
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 代码
var WSDLS = {};
var WebService = new Class({
url : ',
method : ',
options:
{
method:'GET',
data: null,
update: null,
onComplete: Class.empty,
onError:Class.empty,
evalScripts: false,
evalResponse: false
},
initialize: function(url,method,options)
{
this.url = url;
this.method = method;
this.options = options;
},
request : function()
{
var wsdl = WSDLS[this.url];
if(!wsdl)
{
var op = {method:'GET',async: false};
var wsdlAjax = new XHR(op).send(this.url + "?wsdl", null);
wsdl = wsdlAjax.transport.responseXML;
WSDLS[this.url] = wsdl;
}
this.setSoap(wsdl);
},
setSoap : function(wsdl)
{
var paraXML = this.getParaXML(wsdl);
alert(paraXML);
var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value;
var sr =
"" +
" +
"xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" " +
"xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" " +
"xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">" +
"" +
"<"" +
paraXML +
"
JavaScriptSOAP.rar
描述: js调用webservice示例
下载
文件名: JavaScriptSOAP.rar
文件大小: 47 KB
下载过的: 文件被下载或查看269 次
JavaScriptSOAP(V2).rar
描述: js,sope第二版
下载
文件名: JavaScriptSOAP(V2).rar
文件大小: 49 KB
下载过的: 文件被下载或查看423 次
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
相关文章: 无类语言的OOP(JavaScript描述) 给javascript library挑挑刺
推荐链接: 即刻点击免费下载Rational最新试用版软件 IBM WebSphere 应用服务器管理免费培训活动
本文转自
http://www.javaeye.com/topic/98182
时间: 2007-07-05 16:59 关键字: JavaScript soap,javascript
引用 收藏
再javascript中使用soap调用webservice的示例代码
代码再IE6和FF测试通过,对于c#写的webservice和java(xfire)写的,都测试过,没有问题
此代码原型来源于 http://www.guru4.net/的javascript soapclient
发现这个下载的js只能用于调用c#的webservice,所以利用mootools,重新封装,达到IE和火狐的兼容的同时,兼容java和c#
(再例子中使用的 mootools.v1.11.js 文件,做过修改)
客户端js调用代码如下
js 代码
function ajaxRequest()
{
var url = "http://localhost:88/webservicedemo.asmx"
//设置webService传入参数
//
//注意:
//
// 调用.Net 写的webservice(如例子中的webservicedemo.asmx)
// HelloTo(String name) 针对name参数必须写成 wqj,还有更多参数一样写,使用名称匹配
// 传入的参数数量可以不等于(多于或少于)方法要求的参数
//
// 调用java(xfire) 发布的webService
// 传入的参数必须与调用方法的参数数量相等,且按传入值的顺序进行匹配
//
var para = "wqj" 这里应该是一个标准的xml形式,源码贴出来时被虑掉了,请参看附件源码
var op = {
data:para,
onComplete: showResponse,
onFailure:showError,
update:'ajaxBack'
};
var service = new WebService(url,"HelloTo",op);
service.request();
return false
}
function showError(obj)
{
//obj 是一个xmlHttpRequest对象
alert("error");
}
function showResponse(requestText,requestXML)
{
//requestText 返回的文本
//requestXML 返回的XML
alert("ok");
}
WebService类的代码如下(webservice.js)
js 代码
var WSDLS = {};
var WebService = new Class({
url : ',
method : ',
options:
{
method:'GET',
data: null,
update: null,
onComplete: Class.empty,
onError:Class.empty,
evalScripts: false,
evalResponse: false
},
initialize: function(url,method,options)
{
this.url = url;
this.method = method;
this.options = options;
},
request : function()
{
var wsdl = WSDLS[this.url];
if(!wsdl)
{
var op = {method:'GET',async: false};
var wsdlAjax = new XHR(op).send(this.url + "?wsdl", null);
wsdl = wsdlAjax.transport.responseXML;
WSDLS[this.url] = wsdl;
}
this.setSoap(wsdl);
},
setSoap : function(wsdl)
{
var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value;
var sr =
" " +
""
"xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" " +
"xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" " +
"xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">" +
"" +
"<"" +
(this.options.data === null ?"":this.options.data) +
" + this.method + ">
this.options.method = 'post';
this.options.data = null
var soapaction = ((ns.lastIndexOf("/") != ns.length - 1) ? ns + "/" : ns) + this.method;
var soapAjax = new Ajax(this.url,this.options);
soapAjax.setHeader("SOAPAction", soapaction);
soapAjax.setHeader("Content-type", "text/xml; charset=utf-8");
soapAjax.request(sr);
}
});
在第一个版本中存在以下问题
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 代码
var WSDLS = {};
var WebService = new Class({
url : ',
method : ',
options:
{
method:'GET',
data: null,
update: null,
onComplete: Class.empty,
onError:Class.empty,
evalScripts: false,
evalResponse: false
},
initialize: function(url,method,options)
{
this.url = url;
this.method = method;
this.options = options;
},
request : function()
{
var wsdl = WSDLS[this.url];
if(!wsdl)
{
var op = {method:'GET',async: false};
var wsdlAjax = new XHR(op).send(this.url + "?wsdl", null);
wsdl = wsdlAjax.transport.responseXML;
WSDLS[this.url] = wsdl;
}
this.setSoap(wsdl);
},
setSoap : function(wsdl)
{
var paraXML = this.getParaXML(wsdl);
alert(paraXML);
var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value;
var sr =
"" +
" +
"xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" " +
"xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" " +
"xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//">" +
"" +
"<"" +
paraXML +
"
JavaScriptSOAP.rar
描述: js调用webservice示例
下载
文件名: JavaScriptSOAP.rar
文件大小: 47 KB
下载过的: 文件被下载或查看269 次
JavaScriptSOAP(V2).rar
描述: js,sope第二版
下载
文件名: JavaScriptSOAP(V2).rar
文件大小: 49 KB
下载过的: 文件被下载或查看423 次
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
相关文章: 无类语言的OOP(JavaScript描述) 给javascript library挑挑刺
推荐链接: 即刻点击免费下载Rational最新试用版软件 IBM WebSphere 应用服务器管理免费培训活动
本文转自
http://www.javaeye.com/topic/98182