javascript-例子

/**

 * 工具对象

 */

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>

猜你喜欢

转载自luckywnj.iteye.com/blog/1722649