1

在过去的几天里,我一直在重构我的 javascript,以便它可以满足使用 IE7/8/9 的要求。

下面的代码从选择框中获取文件名,然后进行 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

修正了自己,

确认在 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 回答
1

尝试使用jQuery.parseXML()

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

    }
}
于 2013-01-28T14:00:58.427 回答