/**
* 工具对象
*/
comet.utils = {
/**
* 获取随机数参数,形如:&randomNum=18787890001
*/
_getRandomNumParam : function(){
var date = new Date();
var retStr = "&randomNum=" + date.getTime();
return retStr;
},
/**
* 获取项目根路径,返回值形如:http://localhost:8080/sys/
*/
_getRootPath : function (){
//获取当前网址,如:http://localhost:8080/sys/testPushlet.jsp
var curHref = location.href;
//获取主机地址之后的目录,如:/sys/testPushlet.jsp
var pathName = location.pathname;
//获取当前主机地址,如:http://localhost:8080
var host = curHref.substring(0,curHref.indexOf(pathName));
//获取当前项目名称,如:/sys
var projectName = pathName.substring(0,pathName.indexOf("/",1));
return(host + projectName + "/");
},
/**
* 创建兼容firefox、ie5以上版本的xmlHttpRequest对象
*/
_getXMLHttpRequest : function(){
var http_request;
if(comet.browserType=="firefox"){ // firefox
http_request=new XMLHttpRequest();
}else if(comet.browserType=="ie"){ // ie系列
try{
http_request=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){ // IE5.x
http_request=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return http_request;
},
/**
* 封装ajax请求方法(类似jquery中$.ajax)
*/
_ajax : function(args){
var url = null;
var async = true;
var type = "GET";
var postData = null;
var successFun = null;
var errorFun = null;
var timeout = null;
var timer = null;
if(args[url]){
//避免IE下使用缓存,不刷新问题
url = args[url] + comet.utils._getRandomNumParam();
}else{
alert("url could not be null");
}
if(args[async] == false){async = false;}
if(args[type] == "POST"){type = "POST";}
if(args[postData]){postData = args[postData];}
if(args[success]){successFun = args[success];}
if(args[error]){error = args[error];}
if(args[timeout]){timeout = args[timeout];}
var xmlhttp = comet.utils._getXMLHttpRequest();
if (!xmlhttp || xmlhttp == null) {
alert('No browser XMLHttpRequest (AJAX) support');
return;
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
if(successFun != null){successFun(xmlhttp);}
} else {
if(errorFun != null){errorFun(xmlhttp);}
alert("XMLHttpResponse return error ,the status is" + xmlhttp.status);
}
if(timer){
clearTimeout(timer);
timer = null;
}
}
};
xmlhttp.open(type, url, async);
xmlhttp.setRequestHeader("content-type","application/x-www-form-urlencoded; charset=utf-8");
xmlhttp.send(null);
if(args[timeout] != null){
timeout = args[timeout];
timer = setTimeout(function(){
alert("超时了");
xmlhttp.abort();
}, timeout);
}
},
/**
* 把xml的txt格式片段解析成xml dom对象
*/
_txt2xml : function (dataset){
if (comet.browserType=="ie"){//IE浏览器
var xmlDom=new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async="false";
xmlDom.loadXML(dataset);
return xmlDom;
}else if(comet.browserType=="firefox"){//firefox浏览器"
var parser=new DOMParser();
xmlDom = parser.parseFromString(dataset,"text/xml");
return xmlDom;
}
},
/**
* 把xml解析成js对象,深度解析
* 参数示例:comet.utils._xml2vo({},xmlData);pvo不能为null,可以为{}
*/
_xml2vo : function (pvo,dataset){
if(dataset==null||dataset.childNodes==null){
return pvo;
}
if(dataset.nodeType == 9){
dataset = dataset.documentElement;
}
var cnt = dataset.childNodes.length;
for(var i=0; i<cnt; i++){
var child = dataset.childNodes[i];
if (child.firstChild.nodeType == 1) {
// 暂时用浅度解析,
pvo[child.nodeName] = child;//暂时用这个
// pvo[child.nodeName] = {};
// comet.utils._xml2vo(pvo[child.nodeName],child);
} else {
pvo[child.nodeName] = child.firstChild.nodeValue;
}
}
return pvo;
}
};
{"pstate":"","pdata":{"pcprice":"21,000","pcname":"thinkpad-T400"},"pid":"","psubject":"thickpad","ptime":"","ptype":"join"}
<?xml version="1.0" encoding="UTF-8"?><Ack><ptype>join</ptype><psubject>thickpad</psubject><pdata class="com.abchina.console.util.pushlet.test.PCReturnData"><pcname>thinkpad-T400</pcname><pcprice>21,000</pcprice></pdata></Ack>
xml递归解析成js对象,以后测试。
<html>
<head>
<script type="text/javascript">
function b(){
//var str = '{"plist":[{"price":888},{"price":999}]}';
//var jt = eval("("+str+")");
//alert(jt);
//var xml = '<?xml version="1.0" encoding="UTF-8"?><Ack><ptype>cautopush</ptype><ptime>100000</ptime><pid>1311728138781</pid><pstate>OK</pstate><psubject>auto_subject02</psubject><pdata class="liubo.web.pushlet.test.PCReturnData"><pcname>thinkpad-T25</pcname><plist><pcprice>16,000</pcprice><pcprice>25,000</pcprice></plist></pdata></Ack>';
var xml = '<?xml version="1.0" encoding="UTF-8"?><plist><pcprice>16,000</pcprice><pcprice>25,000</pcprice></plist>';
var xmldom = _txt2xml(xml);
var t = _xml2vo({},xmldom);
alert(t);
}
function _txt2xml (dataset){
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("msie") > -1){//IE浏览器
var xmlDom=new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async="false";
xmlDom.loadXML(dataset);
return xmlDom;
}else if(ua.indexOf("firefox") > -1){//firefox浏览器"
var parser=new DOMParser();
xmlDom = parser.parseFromString(dataset,"text/xml");
return xmlDom;
}
}
function _xml2vo(pvo,dataset){
if(dataset==null||dataset.childNodes==null){
return pvo;
}
if(dataset.nodeType == 9){
dataset = dataset.documentElement;
pvo[dataset.nodeName]={};
}
var cnt = dataset.childNodes.length;
for(var i=0; i<cnt; i++){
var child = dataset.childNodes[i];
if (child.firstChild.nodeType == 1) {
if(pvo[child.nodeName]){
pvo = new Array(pvo[child.nodeName]);
delete(pvo[child.nodeName]);
var tmp = {};
tmp[child.nodeName] = {};
pvo.push(tmp);
_xml2vo(tmp,child);
}else{
pvo[child.nodeName] = {};
_xml2vo(pvo[child.nodeName],child);
}
} else {
if(pvo[child.nodeName]){
pvo = new Array(pvo[child.nodeName]);
delete(pvo[child.nodeName]);
var tmp = {};
tmp[child.nodeName] = child.firstChild.nodeValue;
pvo.push(tmp);
}else{
pvo[child.nodeName] = child.firstChild.nodeValue;
}
}
}
return pvo;
}
</script>