我正在构建一个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文档,它没有错误。
感谢任何帮助。
答案 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"?>