<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    關于利用dom返回xml亂碼的解決方案

    Posted on 2007-06-01 16:30 姜海龍 閱讀(2358) 評論(0)  編輯  收藏
    在我的項目中,系統要支持多語言環境,所以采用utf-8編碼格式,系統菜單是通過一個action返回一個xml獲得菜單數據進行加載的。
    最初js腳本中采用如下方式進行加載:
    1var xmlDoc = new ActiveXObject("MSXML.DOMDocument");
    2xmlDoc.async = false;
    3xmlDoc.load("sysMemo.do");
    結果返回的xml中文全是亂碼,一直搞不明白是什么原因,該設置的地方也全部設置了。最后通過使用WebFx的一個js類通過xmlhttp的方式解決了這個問題。
    下面這段代碼是WebFx的xmlextras.js中的代碼:
      1     function getDomDocumentPrefix() {
      2        if (getDomDocumentPrefix.prefix)
      3            return getDomDocumentPrefix.prefix;
      4        
      5        var prefixes = ["MSXML2""Microsoft""MSXML""MSXML3"];
      6        var o;
      7        for (var i = 0; i < prefixes.length; i++{
      8            try {
      9                // try to create the objects
     10                o = new ActiveXObject(prefixes[i] + ".DomDocument");
     11                return getDomDocumentPrefix.prefix = prefixes[i];
     12            }

     13            catch (ex) {};
     14        }

     15        
     16        throw new Error("Could not find an installed XML parser");
     17    }

     18    
     19    function getXmlHttpPrefix() {
     20        if (getXmlHttpPrefix.prefix)
     21            return getXmlHttpPrefix.prefix;
     22        
     23        var prefixes = ["MSXML2""Microsoft""MSXML""MSXML3"];
     24        var o;
     25        for (var i = 0; i < prefixes.length; i++{
     26            try {
     27                // try to create the objects
     28                o = new ActiveXObject(prefixes[i] + ".XmlHttp");
     29                return getXmlHttpPrefix.prefix = prefixes[i];
     30            }

     31            catch (ex) {};
     32        }

     33        
     34        throw new Error("Could not find an installed XML parser");
     35    }

     36    
     37    //////////////////////////
     38    // Start the Real stuff //
     39    //////////////////////////
     40    
     41    
     42    // XmlHttp factory
     43    function XmlHttp() {}
     44    
     45    XmlHttp.create = function () {
     46        try {
     47            if (window.XMLHttpRequest) {
     48                var req = new XMLHttpRequest();
     49                
     50                // some versions of Moz do not support the readyState property
     51                // and the onreadystate event so we patch it!
     52                if (req.readyState == null{
     53                    req.readyState = 1;
     54                    req.addEventListener("load"function () {
     55                        req.readyState = 4;
     56                        if (typeof req.onreadystatechange == "function")
     57                            req.onreadystatechange();
     58                    }
    false);
     59                }

     60                
     61                return req;
     62            }

     63            if (window.ActiveXObject) {
     64                return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
     65            }

     66        }

     67        catch (ex) {}
     68        // fell through
     69        throw new Error("Your browser does not support XmlHttp objects");
     70    }
    ;
     71    
     72    // XmlDocument factory
     73    function XmlDocument() {}
     74    
     75    XmlDocument.create = function () {
     76        try {
     77            // DOM2
     78            if (document.implementation && document.implementation.createDocument) {
     79                var doc = document.implementation.createDocument(""""null);
     80                
     81                // some versions of Moz do not support the readyState property
     82                // and the onreadystate event so we patch it!
     83                if (doc.readyState == null{
     84                    doc.readyState = 1;
     85                    doc.addEventListener("load"function () {
     86                        doc.readyState = 4;
     87                        if (typeof doc.onreadystatechange == "function")
     88                            doc.onreadystatechange();
     89                    }
    false);
     90                }

     91                
     92                return doc;
     93            }

     94            if (window.ActiveXObject)
     95                return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
     96        }

     97        catch (ex) {}
     98        throw new Error("Your browser does not support XmlDocument objects");
     99    }
    ;
    100    
    101    // Create the loadXML method and xml getter for Mozilla
    102    if (window.DOMParser &&
    103        window.XMLSerializer &&
    104        window.Node && Node.prototype && Node.prototype.__defineGetter__) {
    105    
    106        // XMLDocument did not extend the Document interface in some versions
    107        // of Mozilla. Extend both!
    108        XMLDocument.prototype.loadXML = 
    109        Document.prototype.loadXML = function (s) {
    110            
    111            // parse the string to a new doc    
    112            var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
    113            
    114            // remove all initial children
    115            while (this.hasChildNodes())
    116                this.removeChild(this.lastChild);
    117                
    118            // insert and import nodes
    119            for (var i = 0; i < doc2.childNodes.length; i++{
    120                this.appendChild(this.importNode(doc2.childNodes[i], true));
    121            }

    122        }
    ;
    123        
    124        
    125        /*
    126         * xml getter
    127         *
    128         * This serializes the DOM tree to an XML String
    129         *
    130         * Usage: var sXml = oNode.xml
    131         *
    132         */

    133        // XMLDocument did not extend the Document interface in some versions
    134        // of Mozilla. Extend both!
    135        XMLDocument.prototype.__defineGetter__("xml"function () {
    136            return (new XMLSerializer()).serializeToString(this);
    137        }
    );
    138        Document.prototype.__defineGetter__("xml"function () {
    139            return (new XMLSerializer()).serializeToString(this);
    140        }
    );
    141    }

    下面是我調用的過程:
    1var xmlHttp = XmlHttp.create();
    2            xmlHttp.open("GET""showMenu.do"false);    // async
    3            xmlHttp.onreadystatechange = function () {
    4                if (xmlHttp.readyState == 4{
    5                    getMenuTree(xmlHttp.responseXML);
    6                }

    7            }
    ;
    8            xmlHttp.send(null);

    這段代碼要包含在一個方法中。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 9, comments - 19, trackbacks - 0, articles - 1

    Copyright © 姜海龍

    主站蜘蛛池模板: 国产日本一线在线观看免费| 国产亚洲美日韩AV中文字幕无码成人| 久久最新免费视频| 亚洲人成无码网站在线观看| 亚洲成色999久久网站| 啊v在线免费观看| 很黄很色很刺激的视频免费| 在线看片免费人成视频久网下载 | 亚洲春色另类小说| 亚洲精品无码专区久久久| 国产精品免费_区二区三区观看| 国产成人精品免费视频网页大全| 大地资源网高清在线观看免费| 狠狠热精品免费观看| 亚洲AV一区二区三区四区| 亚洲AV无码成人专区| 内射干少妇亚洲69XXX| 亚洲成AV人片在线观看无| 国产91精品一区二区麻豆亚洲 | 亚洲国产精品久久久久婷婷软件| 亚洲国产精品日韩| 免费乱理伦在线播放| 日本久久久免费高清| 午夜毛片不卡高清免费| 色妞WWW精品免费视频| 国产成人精品免费视频动漫| 久视频精品免费观看99| 1a级毛片免费观看| 久久国产精品成人片免费| 久久国产免费观看精品3| 又大又硬又爽又粗又快的视频免费| 免费一区二区三区| 99视频精品全部免费观看| 日本免费中文视频| 蜜桃成人无码区免费视频网站| 三年片在线观看免费观看大全动漫 | 相泽亚洲一区中文字幕| 国产亚洲欧洲Aⅴ综合一区| 国产精品亚洲综合专区片高清久久久 | 亚洲一区二区三区国产精品| 亚洲精品乱码久久久久久不卡|