【问题标题】:Type Mismatch when parsing XML to string in IE在 IE 中将 XML 解析为字符串时类型不匹配
【发布时间】:2013-01-11 21:14:09
【问题描述】:

在过去的几天里,我一直在重构我的 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>

这个问题肯定有一些破解方法。

谢谢

【问题讨论】:

标签: jquery internet-explorer xml-serialization xmlhttprequest


【解决方案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;

        }

    }
}

【讨论】:

    【解决方案2】:

    尝试使用jQuery.parseXML()

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

    【讨论】:

    • 谢谢,但这给了我一个 NULL 值
    • 我有一种感觉,我需要先序列化对象,然后 Jquery 才能使用它
    • 你能告诉我你将得到的示例 xml 响应吗?类似&lt;rss version='2.0'&gt;&lt;channel&gt;&lt;title&gt;RSS Title&lt;/title&gt;&lt;/channel&gt;&lt;/rss&gt;
    • 请查看this。这可能会帮助您正确解析它...
    • 我认为您需要先序列化对象,然后再使用 jQuery 处理它。
    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多