如何使用jQuery从Internet Explorer中的本地XML文件中查询XML元素?

如何使用jQuery从Internet Explorer中的本地XML文件中查询XML元素?,jquery,xml,internet-explorer,Jquery,Xml,Internet Explorer,我正在构建一个用于触摸屏信息亭的HTML页面。我有一个名为data.XML的外部XML文件,它与我的HTML页面位于同一目录中。我能够使用jQuery加载外部XML文件,解析它,并在页面加载上动态构建一些HTML,而Firefox和Chrome中没有任何问题。但后来我在Internet Explorer中尝试了它 使用$.ajax函数可以很好地加载XML文档。我做了一个alertxmlDoc.text,它显示了XML文档的所有文本内容。所以这不是问题所在 我做了一些搜索并找到了一个解决方案,如果

我正在构建一个用于触摸屏信息亭的HTML页面。我有一个名为data.XML的外部XML文件,它与我的HTML页面位于同一目录中。我能够使用jQuery加载外部XML文件,解析它,并在页面加载上动态构建一些HTML,而Firefox和Chrome中没有任何问题。但后来我在Internet Explorer中尝试了它

使用$.ajax函数可以很好地加载XML文档。我做了一个alertxmlDoc.text,它显示了XML文档的所有文本内容。所以这不是问题所在

我做了一些搜索并找到了一个解决方案,如果您是从web服务器提供XML的话。它基本上表示,为了让InternetExplorer将xml字符串视为xml,需要以下HTTP头

内容类型:application/xml;字符集=utf-8

此HTML页面只需在Internet Explorer中作为独立页面运行即可。我们不会在kiosk机器上运行web服务器

我的问题是,在jQuery中加载本地资源时,是否有任何方法可以指定正确的内容类型

下面是我正在使用的相关ajax代码

$.ajax({
  url: 'data.xml',
  async : false,
  success : function(response) {
    xml = $(response);
  }
});

// Following line works in Firefox/Chrome, but not in Internet Explorer
var firstItemText = $("item:first", xml).text();
编辑:我在ajax请求中添加了一个错误处理函数,如下所示

此函数在Internet Explorer中启动,结果消息为:

无法加载数据:-parsererror

我用几个在线XML验证工具检查了我的XML文档,它没有错误


感谢您的帮助。

尝试将您的内容类型更改为:

content-type:text/xml;charset=utf-8 别忘了在XML文件中添加这一行,它必须是第一行

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

尝试将内容类型更改为:

content-type:text/xml;charset=utf-8 别忘了在XML文件中添加这一行,它必须是第一行

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

经过一些测试,我设法使它工作

问题是,当您在本地加载XML文件时,Internet Explorer接收的数据是纯文本,而不是text/XML

解决办法是:

$.ajax({
    url: 'data.xml',
async : false,
dataType: ($.browser.msie) ? "text" : "xml",
success : function(response) 
{
    if (typeof response == "string") 
    {
        xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.loadXML(response);
    } 
    else 
        xml = $(response);
    },

error: function(XMLHttpRequest, textStatus, errorThrown) 
    {
    alert('Data Could Not Be Loaded - '+ textStatus);
}
});

var firstItemText = $("item:first", xml).text();
您可以在此链接中看到完整的说明:


如果我能帮上忙,我很高兴。

经过一些测试,我成功地使它工作了

问题是,当您在本地加载XML文件时,Internet Explorer接收的数据是纯文本,而不是text/XML

解决办法是:

$.ajax({
    url: 'data.xml',
async : false,
dataType: ($.browser.msie) ? "text" : "xml",
success : function(response) 
{
    if (typeof response == "string") 
    {
        xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    xml.loadXML(response);
    } 
    else 
        xml = $(response);
    },

error: function(XMLHttpRequest, textStatus, errorThrown) 
    {
    alert('Data Could Not Be Loaded - '+ textStatus);
}
});

var firstItemText = $("item:first", xml).text();
您可以在此链接中看到完整的说明:


如果我能帮忙,我很高兴。

您建议我在哪里更改内容类型?我不是从web服务器提供XML文件。我将尝试XML声明。我添加了XML声明,得到了相同的结果。您建议我在哪里更改内容类型?我不是从web服务器提供XML文件。我将尝试XML声明。我添加了XML声明,得到了相同的结果。这一针见血!谢谢菲利普!那一针见血!谢谢菲利普!