您的位置:首页 > Web前端 > JavaScript

使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: