0

我正在尝试将表单值转换为 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].

4

1 回答 1

1

XML 序列化程序需要 XML 文档,而不是 jQuery 包装器(您可以在 Chrome 中看到它的记录)。所以使用xmlToString($root[0]);.

无论如何,由于 jQuery 显然似乎不是为使用 XML 而设计的,所以我只能推荐使用普通的 DOM 方法。它会使你的代码更短。

于 2012-12-07T09:44:46.623 回答