1

過去数日間、IE7 / 8/9での作業要件を満たすことができるように、JavaScriptをリファクタリングしてきました。

以下のコードは、選択ボックスからファイル名を受け取り、AJAX呼び出しを行ってXMLファイルを取得します。このファイルはシリアル化されて読み取れるようになります。

Firefox、Safari、Chromeで問題なく動作します。

コード

    //this function will take the parameter of filename to then make an AJAX request to the location of that file on a server
function getXML()
{
    //get filename from selection box "template_list"
    filename = $('#template_list').val();

    if (filename != "NULL")
        {
            //make AJAX request to server for template file 
            jQuery.ajax
            (
                {
                    type : "GET",
                    url : "xml\/" + filename,
                    dataType : "xml",
                    success : xmlToString
                }
            );
        }   
}

//loads xmlResponse from AJAX call into a string
function xmlToString(xmlResponse)
{

    try 
    {
        //For FF, Opera, Safari
        xml = (new XMLSerializer()).serializeToString(xmlResponse);
        writeEditDoc(xml);
    }

    catch (e) 
    {       
            // Internet Explorer.
            xml = new ActiveXObject("Microsoft.XMLDOM");
            xml.loadXML(xmlResponse);
            writeEditDoc(xml);
            //

    }

}

エラー

Internet Explorerは、このコード行が好きではありません。

xml.loadXML(xmlResponse);

投げる

SCRIPT13:タイプの不一致

私が試したこと

  • AJAX呼び出しのデータ型を「xml」から「text/xml」に変更する
  • JS内でネイティブの.xml()関数を使用する

サーバー側での処理に関する他の投稿を見てきました。ただし、このプロジェクトのスコープがないと、サーバーに変更を加えることはできません。

編集追加されたXMl

<?xml version="1.0" encoding="UTF-8"?>

<text>${Prologue} </text>


<listOfTags>
    <Prologue fixed='n' size='100' type='textBox' value='' ></Prologue>
    <Title fixed='n' size='100' type='comboBox' value='' ></Title>
    <Surname fixed='n' size='100' type='textBox' value='' ></Surname>
    <ProductName fixed='n' size='100' type='textBox' ></ProductName>
    <VOLNumber fixed='n' size='100' type='numberBox' ></VOLNumber>
    <AppointmentDate fixed='n' size='100' type='datePicker' ></AppointmentDate>
    <AppointmentSlot fixed='n' size='100' type='datePicker' ></AppointmentSlot>
    <Epilogue fixed='n' size='100' type='textBox' ></Epilogue>
</listOfTags>


<listOfTypes>
    <textBox></textBox>
    <numberBox></numberBox>
    <datePicker></datePicker>
    <dropDown></dropDown>
    <timeBox></timeBox>
    <titleBox></titleBox>
</listOfTypes>

この問題にはハックが必要です。

ありがとう

4

2 に答える 2

1

jQuery.parseXML()を使用してみてください

function xmlToString(xmlResponse)
{
    try 
    {
        xml = $.parseXML(xmlResponse);
        console.log(xml);
    }
    catch (e) 
    {       

    }
}
于 2013-01-28T14:00:58.427 に答える
1

自分を直した、

IE7、IE9、FFでの動作を確認

    function getXML()
{

    var xmlDoc;
    var xmlloaded = false;

    //get filename from selection box "template_list"
    var xmlFile = $('#template_list').val();


    if (xmlFile != "NULL")      
    {

        xmlFile = "xml\/" + xmlFile;

        try
        {

            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("GET", xmlFile, false);
            //console.log("1 getXML - Normal Path");
        }

        catch (Exception)
        {
            var ie = (typeof window.ActiveXObject != 'undefined');

            if (ie)
            {

                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = false;
                while(xmlDoc.readyState != 4) {};
                xmlDoc.load(xmlFile);
                //console.log("1 getXML - IE Path");                
                xmlToString(xmlDoc);
                xmlloaded = true;
            }
            else
            {

                xmlDoc = document.implementation.createDocument("", "", null);
                xmlDoc.onload = xmlToString(xmlDoc);
                //console.log("1 getXML - Else Case");
                xmlDoc.load(xmlfile);
                xmlloaded = true;
            }
        }

        if (!xmlloaded)
        {

            xmlhttp.setRequestHeader('Content-Type', 'text/xml')
            xmlhttp.send("");
            //console.log("1 getXML - End");
            xmlToString(xmlhttp.responseXML);        
            xmlloaded = true;

        }

    }
}
于 2013-01-31T11:34:56.297 に答える