////////////////// // Helper Stuff // ////////////////// // used to find the Automation server name function getDomDocumentPrefix() { if (getDomDocumentPrefix.prefix) return getDomDocumentPrefix.prefix; var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; var o; for (var i = 0; i < prefixes.length; i++) { try { // try to create the objects o = new ActiveXObject(prefixes[i] + ".DomDocument"); return getDomDocumentPrefix.prefix = prefixes[i]; } catch (ex) {}; } throw new Error("Could not find an installed XML parser"); } function getXmlHttpPrefix() { if (getXmlHttpPrefix.prefix) return getXmlHttpPrefix.prefix; var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; var o; for (var i = 0; i < prefixes.length; i++) { try { // try to create the objects o = new ActiveXObject(prefixes[i] + ".XmlHttp"); return getXmlHttpPrefix.prefix = prefixes[i]; } catch (ex) {}; } throw new Error("Could not find an installed XML parser"); } ////////////////////////// // Start the Real stuff // ////////////////////////// // XmlHttp factory function XmlHttp() {} XmlHttp.create = function () { try { if (window.XMLHttpRequest) { var req = new XMLHttpRequest(); // some versions of Moz do not support the readyState property // and the onreadystate event so we patch it! if (req.readyState == null) { req.readyState = 1; req.addEventListener("load", function () { req.readyState = 4; if (typeof req.onreadystatechange == "function") req.onreadystatechange(); }, false); } return req; } if (window.ActiveXObject) { return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp"); } } catch (ex) {} // fell through throw new Error("Your browser does not support XmlHttp objects"); }; // XmlDocument factory function XmlDocument() {} XmlDocument.create = function () { try { // DOM2 if (document.implementation && document.implementation.createDocument) { var doc = document.implementation.createDocument("", "", null); // some versions of Moz do not support the readyState property // and the onreadystate event so we patch it! if (doc.readyState == null) { doc.readyState = 1; doc.addEventListener("load", function () { doc.readyState = 4; if (typeof doc.onreadystatechange == "function") doc.onreadystatechange(); }, false); } return doc; } if (window.ActiveXObject) return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument"); } catch (ex) {} throw new Error("Your browser does not support XmlDocument objects"); }; // Create the loadXML method and xml getter for Mozilla if (window.DOMParser && window.XMLSerializer && window.Node && Node.prototype && Node.prototype.__defineGetter__) { // XMLDocument did not extend the Document interface in some versions // of Mozilla. Extend both! //XMLDocument.prototype.loadXML = Document.prototype.loadXML = function (s) { // parse the string to a new doc var doc2 = (new DOMParser()).parseFromString(s, "text/xml"); // remove all initial children while (this.hasChildNodes()) this.removeChild(this.lastChild); // insert and import nodes for (var i = 0; i < doc2.childNodes.length; i++) { this.appendChild(this.importNode(doc2.childNodes[i], true)); } }; /* * xml getter * * This serializes the DOM tree to an XML String * * Usage: var sXml = oNode.xml * */ // XMLDocument did not extend the Document interface in some versions // of Mozilla. Extend both! /* XMLDocument.prototype.__defineGetter__("xml", function () { return (new XMLSerializer()).serializeToString(this); }); */ Document.prototype.__defineGetter__("xml", function () { return (new XMLSerializer()).serializeToString(this); }); } function loadAsync2(sUri) { var doc = XmlDocument.create(); doc.async = true; doc.onreadystatechange = function () { if (doc.readyState == 4) alert(doc.xml); // doc.xml : String } doc.load(sUri); } function postAsync(sUri, xmlDoc) { var xmlHttp = XmlHttp.create(); var async = true; xmlHttp.open("GET", sUri, async); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) alert(xmlHttp.responseText); // responseXML : XmlDocument .responseText } xmlHttp.send(xmlDoc); }