当前位置: 首页 > 面试题库 >

jQuery .find()不会在IE中返回数据,但会在Firefox和Chrome中返回数据

滕璞瑜
2023-03-14
问题内容

我为一个朋友做了一些网络工作,帮助了他。他需要的一部分是在他的站点上更改几段文字的简单方法。与其让他编辑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不支持该方法。



 类似资料:
  • 问题内容: 我正在尝试用JavaScript构建一个小日历。我的日期在Firefox和Chrome中运行良好,但是在IE中,日期函数返回了NaN。 这是函数: 是当前星期的星期一,实际上是在php中以“ m,d,Y”格式设置的,例如。 问题答案: Date构造函数接受任何值。如果参数的原始[[value]]是数字,则创建的日期具有该值。如果原始[[value]]为String,则规范仅保证Date

  • 问题内容: 我正在Windows上的Go 1.6中工作,尝试将证书容器导出到PFX(此处的最终目标是从证书存储区访问可导出的私钥)。 我已经打开了一个内存存储并将证书插入到存储中: 现在,我想生成该商店的PFX。我已经定义了一个用于包含数据blob的结构,并希望使用PFXExportCertStoreEx来获取商店的PFX: 这 一半 有效。 填充了看起来像一个适当的值(即,如果我增加更多的证书商

  • 我花了几个小时来查找为什么我的代码没有从这个结构X:/中检索到文件“firstname”的原因 当我在debug中时,我可以看到Firebase检索与“firstname”相同级别的所有其他字段,但最后一个字段始终为null,即使它中有有效数据。 这是我创建FireStoreRecyclerOptions的行: 这是我的QueryFireStore: 而X类是一个POJO,包含以下数据结构:

  • 问题内容: 我正在使用Asp.net MVC3,并尝试在服务器上做一个简单的Ajax发布,它返回部分视图并在搜索过程中更新我的项目列表。 Ajax成功调用服务器,服务器通过发送部分视图进行响应。但是部分视图始终在新页面中呈现。我发现这是因为它不知道即将到来的ajax调用,因此它呈现了一个新页面。 我的控制器代码非常简单: 但是无论如何,Request.IsAjaxRequest()始终返回fals

  • 我正在使用下面的gql查询生成一个GraphQL请求。 但是当我在下面的代码中注销它时,它返回未定义的。 知道我做错了什么吗?该怎么纠正?

  • 问题内容: 我已经完成了jQuery和Ajax,但无法将响应放入Div元素中。这是代码: Index.html 它正在收到对我的回复。 将下面的代码回报文件: 我能否将OneVal和Subval提取到变量中,以及如何提取“ OneVal”和“ SubVal”而不是上面的响应? 问题答案: 您可以在根据响应创建的jQuery对象上使用: