代码部分:
/*
*
* Suds: A Lightweight JavaScript SOAP Client 一个轻量级的SOAP客户端
* Copyright: 2009 Kevin Whinnery (http://www.kevinwhinnery.com) 版权:xxx
* License: http://www.apache.org/licenses/LICENSE-2.0.html
* Source: http://github.com/kwhinnery/Suds 源码地址
*/
function SudsClient(_options) {
// A generic extend function - thanks MooTools //定义默认变量,修改变量
function extend(original, extended) { // 传入原件和扩展数据
extended = extended || {}; // 是否拥有对象,木有则创建对象
for ( var key in extended) { // 遍历对象
if (extended.hasOwnProperty(key)) { // 是否拥有此方法
original[key] = extended[key]; // 将extended自身的方法添加到原件中
}
}
return original; // 返回原件
}
// Check if an object is an array //查看一个对象是否为数组
function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]'; // 获取对象类型
}
// Grab an XMLHTTPRequest Object //创建一个XMLHTTPRequest对象
function getXHR() {
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; // 有对象了
}
// Parse a string and create an XML DOM object //通过解析string创建一个XMLDOM对象
function xmlDomFromString(_xml) { // 传进来一个xml格式的string
var xmlDoc = null;
if (window.DOMParser) { // 判断浏览器支持
parser = new DOMParser();
xmlDoc = parser.parseFromString(_xml,"text/xml"); // 格式成xmlDoc
}
else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false"; // 关闭异步
xmlDoc.loadXML(_xml); // 加载
}
return xmlDoc; // 返回
}
// Convert a JavaScript object to an XML string - takes either an //将对象(最好是JSON)为XML string
function convertToXml(_obj) {
var xml = '';
if (isArray(_obj)) { // 先看一下对象是否为数组
for ( var i = 0; i < _obj.length; i++) {
xml += convertToXml(_obj[i]);
}
} else {
// For now assuming we either have an array or an object graph //假设我们拥有数组或对象任意一个
for ( var key in _obj) {
xml += '<'+key+'>';
if (isArray(_obj[key]) || ( typeof _obj[key] == 'object' && _obj[key] != null)) {
xml += convertToXml(_obj[key]);
}
else {
xml += _obj[key];
}
xml += '</'+key+'>';
}
}
return xml; // 方法就是遍历整个_obj,再单独遍历单个,将key作为节点,值为值
}
// Client Configuration //客户端配置
var config = extend({
endpoint:'http://localhost', // 这些都是默认配置,在不修改的情况下使用
targetNamespace: 'http://localhost', // 目标命名空间
envelopeBegin: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:ns0="PLACEHOLDER" 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/">',
headerBegin: '<soap:Header>',
headerNode:'head',
headerEnd: '</soap:Header>',
bodyBegin:'<soap:Body>',
envelopeEnd: '</soap:Body></soap:Envelope>',
timeout: 5000
},_options); // _options参数传入需要修改的部分
// Invoke a web service
this.invoke = function(_soapAction,_body,_callback,_error,_header) { // 对象调用方法//不需要的直接不传
// Build request body
var body = _body; // body应该是一个对象样式,转成xml格式
var header = _header; // 设置header
// Allow straight string input for XML body - if not, build from object
if ( typeof body !== 'string') { // 传入的参数判断
body = '<'+_soapAction+' xmlns="'+config.targetNamespace+'">';
body += convertToXml(_body); // 配置格式
body += '</'+_soapAction+'>';
} // 最终得到xml
var ebegin = config.envelopeBegin;
config.envelopeBegin = ebegin.replace('PLACEHOLDER', config.targetNamespace);
// Build Soapaction header - if no trailing slash in namespace, need to splice one in for soap action
var soapAction = ''; // 这段是将_soapAction添加到url中,判定是否有'/'在最后
if (config.targetNamespace.lastIndexOf('/') != config.targetNamespace.length - 1) {
soapAction = config.targetNamespace+'/'+_soapAction;
}
else {
soapAction = config.targetNamespace+_soapAction;
}
// POST xml 到 服务终结点
var xhr = getXHR(); // 创建对象
xhr.onload = function() { // 回调函数执行
_callback.call( this, xmlDomFromString( this.responseText)); // 将值转成XMLDOM格式
};
xhr.onerror = function() {
_error.call(); // 回调错误代码
}
xhr.setTimeout(config.timeout); // 延迟执行时间
var sendXML = '';
if(!header) { // 参数_header暂时木有用到,设置另外的xml doc
sendXML = config.envelopeBegin+body+config.envelopeEnd; // 发送到值
} else {
// Allow straight string input for XML body - if not, build from object
if ( typeof header !== 'string') { // 设置需要的sendXML
header = '<'+_soapAction+' xmlns="'+config.targetNamespace+'">';
header += convertToXml(_header);
header += '</'+_soapAction+'>';
}
sendXML = config.envelopeBegin+config.headerBegin+header+config.headerEnd+config.bodyBegin+body+config.envelopeEnd;
}
xhr.open('POST',config.endpoint); // open方法
xhr.setRequestHeader('Content-Type', 'text/xml'); // 请求头类型
xhr.setRequestHeader('Content-Length', sendXML.length); // 设置长度,节省资源?
xhr.setRequestHeader('SOAPAction', soapAction); // 设置SOAPAction
if (config.authorization !== undefined) { // 授权
xhr.setRequestHeader('Authorization', 'Basic ' + config.authorization);
}
xhr.send(sendXML); // 发送出去
};
}
* Suds: A Lightweight JavaScript SOAP Client 一个轻量级的SOAP客户端
* Copyright: 2009 Kevin Whinnery (http://www.kevinwhinnery.com) 版权:xxx
* License: http://www.apache.org/licenses/LICENSE-2.0.html
* Source: http://github.com/kwhinnery/Suds 源码地址
*/
function SudsClient(_options) {
// A generic extend function - thanks MooTools //定义默认变量,修改变量
function extend(original, extended) { // 传入原件和扩展数据
extended = extended || {}; // 是否拥有对象,木有则创建对象
for ( var key in extended) { // 遍历对象
if (extended.hasOwnProperty(key)) { // 是否拥有此方法
original[key] = extended[key]; // 将extended自身的方法添加到原件中
}
}
return original; // 返回原件
}
// Check if an object is an array //查看一个对象是否为数组
function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]'; // 获取对象类型
}
// Grab an XMLHTTPRequest Object //创建一个XMLHTTPRequest对象
function getXHR() {
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; // 有对象了
}
// Parse a string and create an XML DOM object //通过解析string创建一个XMLDOM对象
function xmlDomFromString(_xml) { // 传进来一个xml格式的string
var xmlDoc = null;
if (window.DOMParser) { // 判断浏览器支持
parser = new DOMParser();
xmlDoc = parser.parseFromString(_xml,"text/xml"); // 格式成xmlDoc
}
else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false"; // 关闭异步
xmlDoc.loadXML(_xml); // 加载
}
return xmlDoc; // 返回
}
// Convert a JavaScript object to an XML string - takes either an //将对象(最好是JSON)为XML string
function convertToXml(_obj) {
var xml = '';
if (isArray(_obj)) { // 先看一下对象是否为数组
for ( var i = 0; i < _obj.length; i++) {
xml += convertToXml(_obj[i]);
}
} else {
// For now assuming we either have an array or an object graph //假设我们拥有数组或对象任意一个
for ( var key in _obj) {
xml += '<'+key+'>';
if (isArray(_obj[key]) || ( typeof _obj[key] == 'object' && _obj[key] != null)) {
xml += convertToXml(_obj[key]);
}
else {
xml += _obj[key];
}
xml += '</'+key+'>';
}
}
return xml; // 方法就是遍历整个_obj,再单独遍历单个,将key作为节点,值为值
}
// Client Configuration //客户端配置
var config = extend({
endpoint:'http://localhost', // 这些都是默认配置,在不修改的情况下使用
targetNamespace: 'http://localhost', // 目标命名空间
envelopeBegin: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:ns0="PLACEHOLDER" 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/">',
headerBegin: '<soap:Header>',
headerNode:'head',
headerEnd: '</soap:Header>',
bodyBegin:'<soap:Body>',
envelopeEnd: '</soap:Body></soap:Envelope>',
timeout: 5000
},_options); // _options参数传入需要修改的部分
// Invoke a web service
this.invoke = function(_soapAction,_body,_callback,_error,_header) { // 对象调用方法//不需要的直接不传
// Build request body
var body = _body; // body应该是一个对象样式,转成xml格式
var header = _header; // 设置header
// Allow straight string input for XML body - if not, build from object
if ( typeof body !== 'string') { // 传入的参数判断
body = '<'+_soapAction+' xmlns="'+config.targetNamespace+'">';
body += convertToXml(_body); // 配置格式
body += '</'+_soapAction+'>';
} // 最终得到xml
var ebegin = config.envelopeBegin;
config.envelopeBegin = ebegin.replace('PLACEHOLDER', config.targetNamespace);
// Build Soapaction header - if no trailing slash in namespace, need to splice one in for soap action
var soapAction = ''; // 这段是将_soapAction添加到url中,判定是否有'/'在最后
if (config.targetNamespace.lastIndexOf('/') != config.targetNamespace.length - 1) {
soapAction = config.targetNamespace+'/'+_soapAction;
}
else {
soapAction = config.targetNamespace+_soapAction;
}
// POST xml 到 服务终结点
var xhr = getXHR(); // 创建对象
xhr.onload = function() { // 回调函数执行
_callback.call( this, xmlDomFromString( this.responseText)); // 将值转成XMLDOM格式
};
xhr.onerror = function() {
_error.call(); // 回调错误代码
}
xhr.setTimeout(config.timeout); // 延迟执行时间
var sendXML = '';
if(!header) { // 参数_header暂时木有用到,设置另外的xml doc
sendXML = config.envelopeBegin+body+config.envelopeEnd; // 发送到值
} else {
// Allow straight string input for XML body - if not, build from object
if ( typeof header !== 'string') { // 设置需要的sendXML
header = '<'+_soapAction+' xmlns="'+config.targetNamespace+'">';
header += convertToXml(_header);
header += '</'+_soapAction+'>';
}
sendXML = config.envelopeBegin+config.headerBegin+header+config.headerEnd+config.bodyBegin+body+config.envelopeEnd;
}
xhr.open('POST',config.endpoint); // open方法
xhr.setRequestHeader('Content-Type', 'text/xml'); // 请求头类型
xhr.setRequestHeader('Content-Length', sendXML.length); // 设置长度,节省资源?
xhr.setRequestHeader('SOAPAction', soapAction); // 设置SOAPAction
if (config.authorization !== undefined) { // 授权
xhr.setRequestHeader('Authorization', 'Basic ' + config.authorization);
}
xhr.send(sendXML); // 发送出去
};
}
使用部分:
var value = '';
var suds = new SudsClient({
endpoint : url
});
try {
suds.invoke('', '', function(xmlDoc) {
var results = xmlDoc.documentElement.getElementsByTagName('EmementName');
if(results && results.length > 0) {
value = results.item(0).text;
}
});
} catch(e) {
Ti.API.error('Error: ' + e);
}
var suds = new SudsClient({
endpoint : url
});
try {
suds.invoke('', '', function(xmlDoc) {
var results = xmlDoc.documentElement.getElementsByTagName('EmementName');
if(results && results.length > 0) {
value = results.item(0).text;
}
});
} catch(e) {
Ti.API.error('Error: ' + e);
}
此处使用了GET方法,去掉了很多方法,表示可以使用!
新人初学js,有错误请指出,谢谢!