2012-12-07 2 views
0

양식 값을 XML로 변환하려고합니다. 전체 스크립트는 Chrome 등에서 정상적으로 작동하지만 IE8은이를 망칠 필요가있었습니다. IE에서 추가 기능에 오류가 발생했기 때문에 처음에는 코드를 변경해야했습니다. (분명히 XML 요소 대신 HTML 요소가 작성되었으므로 이제는 XML이라고 생각하고 IE는 더 이상 징징 대지 않습니다.) 크롬 실제로 콘솔에 빈 줄을 보여줍니다 (크롬과 IE 모두가 정의되지 않은 반환, 문자열로 XML을 변환합니다.JS를 사용하여 XML을 만들고 문자열로 변환

을 내가 잘못 뭐하는 거지?

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 
    } 

을 나는 $ 루트 개체를 로그인 할 때, 크롬 나에게 [<xmldocument>, context: <xmldocument>]으로 시작되는 큰 객체를 제공하며, saveValues ​​등을 포함하는 childnodes를 찾기 위해 확장 할 수 있습니다. IE는 단지 [object Object]을 보여줍니다.

+0

'thisB'란 무엇입니까? 왜 '

'요소 대신에'formName'을 사용합니까? – Bergi

답변

1

XML 시리얼 라이저에는 jQuery 래퍼가 아닌 XML 문서가 필요합니다 (Chrome에 로그인 된 것을 볼 수 있음). 따라서 xmlToString($root[0]);을 사용하십시오.

어쨌든 jQuery가 분명히 XML을 사용하도록 설계되지 않은 것 같아 일반 DOM 메서드 만 사용하는 것이 좋습니다. 코드가 훨씬 짧아집니다.

+0

좋아요! 그것은 내가 생각했던 것보다 훨씬 더 간단했다. 감사! –

관련 문제