我正在尝试将表单值转换为XML。 整个脚本在Chrome等中运行良好,但IE8当然不得不毁掉它。我首先必须更改我的代码,因为IE在append函数上抛出错误(显然我创建了HTML元素而不是XML元素。所以现在我认为所有XML和IE都不再抱怨了。但是,当我试图将XML转换为字符串,Chrome和IE都返回undefined(chrome实际上在控制台中显示一个空行。
我做错了什么?
function xmlToString(xmlData) {
var xmlString;
//IE
if (window.ActiveXObject){
xmlString = xmlData.xml;
}
// code for Mozilla, Firefox, Opera, etc.
else{
xmlString = (new XMLSerializer()).serializeToString(xmlData);
}
return xmlString;
}
function saveValues(thisB,formName){
var xpath = $(thisB).attr("xpath");
var returnToServer = $(thisB).attr("returnToServer");
var version = $(thisB).attr("version");
var now= Math.round(new Date().getTime() / 1000)
var $root = $($.parseXML("<XMLDocument />").getElementsByTagName('*')[0]);
var $valuesEl = $($.parseXML('<saveValues xpath="'+xpath+'" returnToServer="'+returnToServer+'" version="'+version+'"></saveValues>').getElementsByTagName('*')[0]);
$("input").each(function(){
var name = $(this).attr("name");
if(name != 'xmlToPost'+formName && name != 'saveValuesButton'){
if( $(this).attr("type") == 'text' || (($(this).attr("type") == 'checkbox' || $(this).attr("type") == 'radio') && $(this).is(":checked"))){
$valueEl = $($.parseXML('<value datetime="'+now+'" version="'+version+'" name="'+name+'"></value>').getElementsByTagName('*')[0]);
$valuesEl.append($valueEl);
}
}
});
$root.append($valuesEl);
var valuesXML = xmlToString($root);
var postToXMLContent = $("#xmlToPost"+formName).val();
valuesXML = valuesXML.replace(/savevalues/gi,"saveValues");
valuesXML = valuesXML.replace("returntoserver","returnToServer");
//..rest of code
}
当我记录$ root对象时,Chrome会给我一个以[<xmldocument>, context: <xmldocument>]
开头的大对象,我可以展开它来查找包含saveValues等的子节点.IE只显示[object Object]
。
答案 0 :(得分:1)
XML序列化程序需要XML文档,而不是jQuery包装器(您可以在Chrome中看到它)。因此,请使用xmlToString($root[0]);
。
无论如何,由于jQuery显然似乎不适合使用XML,我只能建议使用纯DOM方法。它会使你的代码更短。