使用javascript调用webservice示例
2011-12-09 12:25
656 查看
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/\">" +
"<soap:body>"</soap:body> +
"<" + this.method + " xmlns=\"" + ns + "\">" +
paraXML +
" + 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);
},
getParaXML : function(wsdl)
{
var objNode = null;
var rtnValue = "";
//java(xfire)
var ell = this.getElementsByTagName(wsdl,"xsd:element");
if(ell.length == 0)
{
//c#
ell = this.getElementsByTagName(wsdl,"s:element");
}
for(var i = 0; i < ell.length; i++)
{
if(this.getElementAttrValue(ell[i],"name") == this.method)
{
objNode = ell[i];
break;
}
}
if(objNode == null) return rtnValue;
//java(xfire)
ell = this.getElementsByTagName(objNode,"xsd:element");
if(ell.length == 0)
{
//c#
ell = this.getElementsByTagName(objNode,"s:element");
}
if(ell.length == 0) return rtnValue ;
var hash = new Hash();
if(this.options.data != null && this.options.data.clean != "")
{
hash = this.options.data.split("&").toHash("=");
}
for(var i = 0; i < ell.length; i++)
{
var paraName = this.getElementAttrValue(ell[i],"name");
rtnValue = rtnValue + this.getSingleXML(paraName,hash);
}
return rtnValue;
},
getSingleXML : function (name,hash)
{
name = name.trim();
var rtnValue = "";
if(hash.hasKey(name))
{
rtnValue = hash.get(name);
}
rtnValue = "<" + name + ">" + xmlscc(rtnValue) + " + name + ">"
return rtnValue;
},
getBackData: function(xml)
{
var rtnValue = "";
//java(xfire)
var soap = this.getElementsByTagName(xml,"ns1:out");
if(soap.length == 0)
{
//c#
soap = this.getElementsByTagName(xml,this.method + "Result");
}
return soap[0].childNodes[0].nodeValue;
},
getElementsByTagName : function(objNode,tagName)
{
//tagName 形式如 xsd:element ,写出tag的全称
var ell;
if(this.isIE())
{
ell = objNode.getElementsByTagName(tagName);
}
else
{
if(tagName.contains(":")) tagName = tagName.split(":")[1];
ell = objNode.getElementsByTagName(tagName);
}
return ell;
},
getElementAttrValue : function(objNode,attrName)
{
var rtnValue = "";
if(objNode == null) return rtnValue;
if(objNode.attributes[attrName] + "" == "undefined")
{
if(objNode.attributes.getNamedItem(attrName) != null)
rtnValue = objNode.attributes.getNamedItem(attrName).nodeValue ;
}
else
{
if(objNode.attributes[attrName] != null)
rtnValue = objNode.attributes[attrName].value;
}
return rtnValue;
},
isIE : function()
{
var isMSIE = /*@cc_on!@*/false;
return isMSIE;
}
});
Array.extend({
toHash : function (splitChar)
{
var hash = new Hash({});
for(var i=0;i<this.length;i++)
{
if(this[i].split(splitChar).length == 1) contrnue;
var key = this[i].split(splitChar)[0].trim();
var value = this[i].split(splitChar)[1].trim();
hash.set(key, value);
}
return hash;
}
});
function xmlscc(strData)
{
strData=strData.replace(/&/g, "&");
strData=strData.replace(/>/g, ">");
strData=strData.replace(/"<");
strData=strData.replace(/"/g, """);
strData=strData.replace(/'/g, "'");
return strData;
}
相应的调用代码如下:
js 代码
<script type=< span="">"text/javascript">
var service ;
function ajaxRequest()
{
var url = "http://localhost:88/webservicedemo.asmx";
//设置webService传入参数
//
//注意:
//
// 调用webservice(如例子中的webservicedemo.asmx)
// HelloTo(String name) 针对name参数必须写成name=wqj ,还有更多参数一样写,使用&符号分隔(name=11&age=20&.....),使用名称匹配
// 传入的参数数量可以不等于(多于或少于)方法要求的参数
var para = "name=wqj";
var op = {
data:para,
onComplete: showResponse,
onFailure:showError,
update:'ajaxBack'
};
service = new WebService(url,"HelloTo",op);
service.request();
return false;
}
function showError(obj)
{
//obj 是一个xmlHttpRequest对象
alert("error");
}
function showResponse(requestText,requestXML)
{
//requestText 返回的文本
//requestXML 返回的XML
// service.getBackData 就是取出返回的XML中,实际需要的数据
//经过测试兼容 IE,FF
alert(service.getBackData(requestXML));
}
</script>
JavaScriptSOAP.rar (47.1 KB)
描述: js调用webservice示例
下载次数: 1535
JavaScriptSOAP(V2).rar (49.5 KB)
描述: js,sope第二版
下载次数: 2930
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/\">" +
"<soap:body>"</soap:body> +
"<" + this.method + " xmlns=\"" + ns + "\">" +
paraXML +
" + 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);
},
getParaXML : function(wsdl)
{
var objNode = null;
var rtnValue = "";
//java(xfire)
var ell = this.getElementsByTagName(wsdl,"xsd:element");
if(ell.length == 0)
{
//c#
ell = this.getElementsByTagName(wsdl,"s:element");
}
for(var i = 0; i < ell.length; i++)
{
if(this.getElementAttrValue(ell[i],"name") == this.method)
{
objNode = ell[i];
break;
}
}
if(objNode == null) return rtnValue;
//java(xfire)
ell = this.getElementsByTagName(objNode,"xsd:element");
if(ell.length == 0)
{
//c#
ell = this.getElementsByTagName(objNode,"s:element");
}
if(ell.length == 0) return rtnValue ;
var hash = new Hash();
if(this.options.data != null && this.options.data.clean != "")
{
hash = this.options.data.split("&").toHash("=");
}
for(var i = 0; i < ell.length; i++)
{
var paraName = this.getElementAttrValue(ell[i],"name");
rtnValue = rtnValue + this.getSingleXML(paraName,hash);
}
return rtnValue;
},
getSingleXML : function (name,hash)
{
name = name.trim();
var rtnValue = "";
if(hash.hasKey(name))
{
rtnValue = hash.get(name);
}
rtnValue = "<" + name + ">" + xmlscc(rtnValue) + " + name + ">"
return rtnValue;
},
getBackData: function(xml)
{
var rtnValue = "";
//java(xfire)
var soap = this.getElementsByTagName(xml,"ns1:out");
if(soap.length == 0)
{
//c#
soap = this.getElementsByTagName(xml,this.method + "Result");
}
return soap[0].childNodes[0].nodeValue;
},
getElementsByTagName : function(objNode,tagName)
{
//tagName 形式如 xsd:element ,写出tag的全称
var ell;
if(this.isIE())
{
ell = objNode.getElementsByTagName(tagName);
}
else
{
if(tagName.contains(":")) tagName = tagName.split(":")[1];
ell = objNode.getElementsByTagName(tagName);
}
return ell;
},
getElementAttrValue : function(objNode,attrName)
{
var rtnValue = "";
if(objNode == null) return rtnValue;
if(objNode.attributes[attrName] + "" == "undefined")
{
if(objNode.attributes.getNamedItem(attrName) != null)
rtnValue = objNode.attributes.getNamedItem(attrName).nodeValue ;
}
else
{
if(objNode.attributes[attrName] != null)
rtnValue = objNode.attributes[attrName].value;
}
return rtnValue;
},
isIE : function()
{
var isMSIE = /*@cc_on!@*/false;
return isMSIE;
}
});
Array.extend({
toHash : function (splitChar)
{
var hash = new Hash({});
for(var i=0;i<this.length;i++)
{
if(this[i].split(splitChar).length == 1) contrnue;
var key = this[i].split(splitChar)[0].trim();
var value = this[i].split(splitChar)[1].trim();
hash.set(key, value);
}
return hash;
}
});
function xmlscc(strData)
{
strData=strData.replace(/&/g, "&");
strData=strData.replace(/>/g, ">");
strData=strData.replace(/"<");
strData=strData.replace(/"/g, """);
strData=strData.replace(/'/g, "'");
return strData;
}
相应的调用代码如下:
js 代码
<script type=< span="">"text/javascript">
var service ;
function ajaxRequest()
{
var url = "http://localhost:88/webservicedemo.asmx";
//设置webService传入参数
//
//注意:
//
// 调用webservice(如例子中的webservicedemo.asmx)
// HelloTo(String name) 针对name参数必须写成name=wqj ,还有更多参数一样写,使用&符号分隔(name=11&age=20&.....),使用名称匹配
// 传入的参数数量可以不等于(多于或少于)方法要求的参数
var para = "name=wqj";
var op = {
data:para,
onComplete: showResponse,
onFailure:showError,
update:'ajaxBack'
};
service = new WebService(url,"HelloTo",op);
service.request();
return false;
}
function showError(obj)
{
//obj 是一个xmlHttpRequest对象
alert("error");
}
function showResponse(requestText,requestXML)
{
//requestText 返回的文本
//requestXML 返回的XML
// service.getBackData 就是取出返回的XML中,实际需要的数据
//经过测试兼容 IE,FF
alert(service.getBackData(requestXML));
}
</script>
JavaScriptSOAP.rar (47.1 KB)
描述: js调用webservice示例
下载次数: 1535
JavaScriptSOAP(V2).rar (49.5 KB)
描述: js,sope第二版
下载次数: 2930
相关文章推荐
- 使用JavaScript调用WebService的示例
- 使用javascript调用webservice示例
- 使用javascript调用webservice示例
- 使用javascript调用webservice示例
- 使用javascript调用webservice示例
- javascript中使用MSXML调用我自己电脑上的WEBservice
- 使用js调用webservice的示例
- 利用JavaScript SOAP Client直接调用webService --完整的前后台配置与调用示例
- 使用JavaScript调用WebService四篇文章及代码
- java使用axis调用WebService简单示例
- 利用JavaScript SOAP Client直接调用webService --完整的前后台配置与调用示例
- JavaScript调用WebServices(使用WebService.htc)
- 使用HttpClient工具调用WebService接口的示例
- 使用JS调用WebService示例
- 使用javascript调用webservice
- Java_使用axis1.4调用WebService简单示例
- webservice 如何允许远程访问?如果使用javascript 调用 webservice
- 用JavaScript调用WebService的示例
- 如何使用javascript调用webservice
- 关于JavaScript调用WebService的简单示例!