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

时间:2010-06-25 18:03:22

标签: jquery xml internet-explorer

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

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

我做了一些搜索并找到了a StackOverflow answer,如果您从Web服务器提供XML,它就会解决问题。它基本上表明需要以下HTTP HEADER才能使Internet Explorer将xml字符串视为xml。

content-type:application/xml;charset=utf-8

此HTML页面只需在Internet Explorer中作为独立页面运行。 我们将无法在自助服务终端机上运行网络服务器

我的问题是在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请求上添加了一个错误处理函数,如此......

$.ajax({
  url: 'data.xml',
  async : false,
  dataType : "xml",
  success : function(response) {
    xml = $(response);
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    alert('Data Could Not Be Loaded - '+ textStatus);
  }
});

此功能在Internet Explorer中触发,生成的消息为:

Data Could Not Be Loaded: - parsererror

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

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

经过一些测试后,我设法让它发挥作用。

问题是当您在本地加载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();

您可以在此链接中看到完整说明:

http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

如果我帮忙,我很高兴。

答案 1 :(得分:1)

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

content-type:text/xml;charset=utf-8

并且不要忘记在XML文件中添加此行(必须是第一行)

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