我正在开发一个系统,该系统使用JavaScript和XML存储数据,然后将数据发送到要处理的数据库。这是在Ajax真正起飞之前完成的,这样当客户填写表单时,输入的数据存储在临时服务器端XML文件中,然后一旦提交,就会发送文件进行处理,数据不会被添加到数据库中加载时间,因此有点像Ajax。
有问题的主要代码如下所示:
function makeXML(loc){
xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
xmlDoc.async = false;
root = xmlDoc.createElement("root");
xmlDoc.appendChild(root);
envelope = xmlDoc.createElement("envelope");
root.appendChild(envelope);
packet = xmlDoc.createElement("packet");
root.appendChild(packet);
service = server + loc;
}
这在IE中运行得很好但在chrome中根本没用,因为使用了 ActiveXObject(" MSXML2.DOMDocument"); ,这是不受支持的。在chrome中你的意思是:
if (window.DOMParser) {//For chrome
parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");
}
else {// code for IE
xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
xmlDoc.async = false;
}
现在的问题是遗留代码从未实际加载过它只是存储在内存中的物理文件,因此我无法使用 xmlDoc = parser.parseFromString(text," text / xml"); ,因为它正在寻找物理文件。
我的问题是如何解析临时文件,允许此函数在chrome中工作?
答案 0 :(得分:0)
试试这个:
if (document.implementation.createDocument)
{
var xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.preserveWhiteSpace = false;
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlText,"text/xml");
}
如果提供了一个字符串,它将被解析为var xmlDoc。
答案 1 :(得分:0)
使用DOM实现api创建文档。这在所有当前浏览器(包括IE)中都可用,但当然您可以使用旧版IE的后备。
var xmlDoc;
if (document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument("", "", null);
} else {
xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
xmlDoc.async = false;
}
appendChild()
将返回附加节点,因此您可以将create调用嵌套在追加内。
var root = xmlDoc.appendChild(xmlDoc.createElement("root"));
创建文档后,您可以使用XMLHTTPRequest发送它而不进行序列化。
xhr.open('post', 'http://someurl');
xhr.send(xmlDoc);
或将其序列化为字符串:
var xmlString = (new XMLSerializer()).serializeToString(xmlDoc);