【问题标题】:jQuery AJAX problem in IE7 (possibly other versions as well)IE7 中的 jQuery AJAX 问题(可能还有其他版本)
【发布时间】:2013-04-19 20:42:48
【问题描述】:

谁能告诉我为什么下面的代码在 IE7 中无法运行,但在 Chrome/Firefox 中却可以正常运行?

$(document).ready(function(){
  $.ajax({
    type: "POST",
    dataType: "text",
    cache: false,
    url: "/ajax/ajax.asp",
    data: "cmd=check_forfeits",
    success: function(msg) {
      return false;
    }
  });
});

IE 抛出的 javascript 错误是“Permission Denied”

如果我从相关页面的 JS 文件中删除那段代码,则该页面工作正常,没有错误,所以我认为错误在于那段代码。

:::UPDATE:::

还有一点奇怪的是,当我刷新页面(在 IE7 中)时,我没有收到任何 javascript 错误,而且这段代码似乎可以正常工作。所以就好像页面第一次加载这个代码sn-p错误但是之后它运行得很好。

:::UPDATE:::

以下是来自 IE7 的此页面的提琴手帖子:

#   Result   Protocol   Host                 URL
1   200      HTTP       192.168.47.13:8000   /
2   304      HTTP       192.168.47.13:8000   /js/jquery-1.4.1.js
3   200      HTTP       192.168.47.13:8000   /js/index.js
4   304      HTTP       192.168.47.13:8000   /js/jquery-1.4.1.js
5   200      HTTP       192.168.47.13:8000   /js/index.js
6   304      HTTP       192.168.47.13:8000   /css/main.css
7   304      HTTP       192.168.47.13:8000   /css/grid.css
8   304      HTTP       192.168.47.13:8000   /images/banner.jpg

以下是来自 Firefox 的此页面的提琴手帖子:

#   Result   Protocol   Host                 URL
1   200      HTTP       192.168.47.13:8000   /
2   304      HTTP       192.168.47.13:8000   /js/jquery-1.4.1.js
3   304      HTTP       192.168.47.13:8000   /js/index.js
4   304      HTTP       192.168.47.13:8000   /css/grid.css
5   304      HTTP       192.168.47.13:8000   /css/main.css
6   304      HTTP       192.168.47.13:8000   /images/banner.jpg
7   200      HTTP       192.168.47.13:8000   /ajax/ajax.asp

【问题讨论】:

  • FWIW,缓存选项是“缓存”而不是“缓存”,尽管我怀疑这会中断通话。
  • +1 不错的收获。解决了这个问题,但正如你所说......这不是交易破坏者。
  • 你能在你的机器上实例化一个普通的 XMLHttpRequest 吗?试试xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");,看看你是否得到同样的错误。
  • @Andy E:当我输入你的代码行时,我得到了同样的错误。您可能正在做某事。
  • @Ryan:看起来您已经禁用了原生 XMLHttp 支持和 ActiveX 控件,但我并不完全确定(因此没有将其发布为答案)。见msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx

标签: jquery ajax internet-explorer-7


【解决方案1】:

如果人们碰巧找到这个页面是因为他们遇到了同样的错误 - 我刚刚找到了另一个导致 IE7 失败并出现“PERMISSION DENIED”错误并成功刷新的原因/解决方案。

如果您在 <head> 标签中使用它,请确保:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

请注意,它没有在“;”之后有任何大写字母或空格。我们的网站有这个版本:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这在进行 AJAX 调用时会导致相同的行为。

希望这对其他人有所帮助,因为我们只花了大约 6 个小时来解决这个问题。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    我做了一个工作来解决这个问题。我编写了代码以在不使用 jQuery 的情况下进行 ajax 调用(创建 XMLHttpObject、onreadystatechange 等)。然后我使用 jQuery 来解析 XML。

    由于某些原因,jQuery 的 ajax 在 IE7 上不能很好地工作。

    在 IE7 中你并没有真正得到错误,但如果你调试它,你会发现服务器永远不会被命中,或者代码永远不会到达成功块。

    【讨论】:

      【解决方案3】:

      最新编辑

      我在这里找到了一些关于此的讨论:http://zacster.blogspot.com/2008/10/jquery-ie7-load-url-problem.html 和其他地方。看来问题与 IE7 缓存有关。如果您将 URL 设为唯一可能会解决问题(例如,将 timenow=09472345 添加到请求字符串的末尾。)

      初步反应

      您确定名称是 .asp 吗?我希望看到 .aspx 或 .net 处理的其他扩展如果这是您需要的,那么您可能必须在 IIs 中启用 .asp

      然后我又读了一遍问题

      我看到它可以在其他浏览器中运行,所以它不能是我的原始评论...下载 fiddler 并查看请求与 IE 和其他浏览器的不同之处。

      http://www.fiddler2.com/fiddler2/

      【讨论】:

      • 比较在 IE7 和 Firefox 中发布的帖子后,唯一的区别是 Firefox 有一个额外的帖子...在 /ajax/ajax.asp 的帖子...该帖子永远不会在 IE7 中发布.. 可能是由于“权限被拒绝”错误。
      • 之前的帖子是什么?另外,您是否有 DC - 可能是 IE 正在使用 Windows 身份验证,而另一个没有 - 您拥有非 Windows 用户的权限,但您的域名没有权限。
      • 我已经编辑了上面的原始帖子,以包含两个浏览器的提琴手日志。
      • @Ryan:查看我的最新编辑,我相信我找到了解决您问题的参考。
      • @Hogan:如果您查看提琴手日志,则该帖子甚至从未在 IE7 中的 ajax 页面上进行过,所以我认为在这种情况下更改 url 不会有帮助。
      【解决方案4】:

      我在 IE7 中的 jQuery 中的 AJAX 调用也有问题。我发现了我的问题,但不确定它是否与您的问题有关。

      我没有将协议放在 URL 中,并且在 IE 7 中有额外的斜杠,如下所示:

      //www.mywebsite.com/products//json.php

      除了 shIEt 之外的其他地方都可以使用

      一旦我添加了协议并去掉了额外的斜线,它就一切正常了。

      【讨论】:

        【解决方案5】:

        你的页面可能有不合适的地方,我遇到这个问题的原因是我在同一页面使用 JqueryTool API 时使用了document.write("&lt;style&gt;&lt;/style")

        【讨论】:

          【解决方案6】:

          jquery 1.9.1 中有一行在之后没有使用,但会引发异常: jquery-1.9.1.js 中的第 2582 行第 4 列

          这仅适用于 IE7 而不是 IE8 或更高版本,并且会阻止它加载其余的 jquery 内容。在 IE9 中使用 IE7 兼容模式,我找到了抛出异常的代码行,然后在 jquery1.9.1 中将其注释掉,如下所示:

          // IE6/7 do not support getting/setting some attributes with get/setAttribute
          if ( !getSetAttribute ) {
          
              // Use this for any attribute in IE6/7
              // This fixes almost every IE6/7 issue
              nodeHook = jQuery.valHooks.button = {
                  get: function( elem, name ) {
                      var ret = elem.getAttributeNode( name );
                      return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
                          ret.value :
                          undefined;
                  },
                  set: function( elem, value, name ) {
                      // Set the existing or create a new attribute node
                      var ret = elem.getAttributeNode( name );
                      if ( !ret ) {
                          elem.setAttributeNode(
                              (ret = elem.ownerDocument.createAttribute( name ))
                          );
                      }
          
                      //LB - 19/04/2013 - removed for IE7 compatibility.
                      //ret.value = value += "";
          
                      // Break association with cloned elements by also using setAttribute (#9646)
                      return name === "value" || value === elem.getAttribute( name ) ?
                          value :
                          undefined;
                  }
              };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-09
            • 2010-12-25
            • 2014-01-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多