我为一个朋友做了一些网络工作,帮助了他。他需要的一部分是在他的站点上更改几段文字的简单方法。与其让他编辑HTML,我决定提供一个带有消息的XML文件,然后我使用jQuery将它们从文件中拉出并插入到页面中。
它的效果非常好…在Firefox和Chrome中,在IE7中效果不佳。我希望你们中的一个能告诉我原因。我做了一个公平的但谷歌搜索,但是找不到我想要的东西。
这是XML:
<?xml version="1.0" encoding="utf-8" ?> <messages> <message type="HeaderMessage"> This message is put up in the header area. </message> <message type="FooterMessage"> This message is put in the lower left cell. </message> </messages>
这是我的jQuery调用:
<script type="text/javascript"> $(document).ready(function() { $.get('messages.xml', function(d) { //I have confirmed that it gets to here in IE //and it has the xml loaded. //alert(d); gives me a message box with the xml text in it //alert($(d).find('message')); gives me "[object Object]" //alert($(d).find('message')[0]); gives me "undefined" //alert($(d).find('message').Length); gives me "undefined" $(d).find('message').each(function() { //But it never gets to here in IE var $msg = $(this); var type = $msg.attr("type"); var message = $msg.text(); switch (type) { case "HeaderMessage": $("#HeaderMessageDiv").html(message); break; case "FooterMessage": $("#footermessagecell").html(message); break; default: } }); }); }); </script>
我需要在IE中做些不同的事情吗?基于带有[object Object]的消息框,我假定.find在IE中正常工作,但是由于我无法用[0]索引到数组中或无法检查它的长度,所以我猜想这意味着.find不是返回任何结果。有什么理由可以在Firefox和Chrome中完美运行,但在IE中失败?
我是jQuery的新手,所以我希望自己不要做一些愚蠢的事情。上面的代码已从论坛中删除,并进行了修改以满足我的需要。由于jQuery是跨平台的,因此我认为我不必处理这种混乱情况。
编辑:我发现,如果我在Visual Studio 2008中加载页面并运行它,那么它将在IE中工作。因此事实证明,在开发Web服务器中运行时,它始终有效。现在,我认为IE只是不喜欢从本地驱动器中加载XML格式的.find文件,所以也许当它在实际的Web服务器上运行时就可以了。
我已经确认从网络服务器浏览时可以正常工作。必须是IE的特殊功能。我猜这是因为Web服务器为xml数据文件传输设置了mime类型,而没有IE则无法正确解析xml。
检查响应的内容类型。如果您将message.xml设置为错误的mime类型,则Internet Explorer不会将其解析为XML。
要检查内容类型,您需要访问XMLHttpRequest对象。正常的成功回调不会将其作为参数传递,因此您需要添加通用的ajaxComplete或ajaxSuccess事件处理程序。这些事件的第二个参数是XMLHttpRequest对象。您可以对其调用getResponseHeader方法以获取内容类型。
$(document).ajaxComplete(function(e, x) { alert(x.getResponseHeader("Content-Type")); });
不幸的是,我在Internet Explorer中没有办法覆盖服务器发送的内容,因此,如果错误,则需要更改服务器以发送“ text / xml”作为内容类型。
某些浏览器提供了overrideMimeType一种可以send强制使用“ text / xml”的方法,但是据我所知,Internet Explorer不支持该方法。
overrideMimeType
send