jQuery在IE7(可能也包括其他版本)中的AJAX问题

6

有人能告诉我为什么下面的代码在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文件中删除那部分代码,页面就能正常工作,没有错误,因此我认为错误在于那段代码。

:::更新:::

还有一件有点奇怪的事情是,当我刷新页面(在IE7中)时,我没有收到javascript错误,这段代码似乎运行得很正常。所以好像第一次加载页面时,这段代码会出错,但之后它就可以正常运行。

:::更新:::

这里是IE7页面的Fiddler帖子:

#   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的该页面的Fiddler帖子:
#   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

1
就此而言,缓存选项是'cache'而不是'cached',尽管我怀疑这是否会影响调用。 - BBonifield
+1 很好的发现。我已经修复了,但正如你所说...这并不是决定性因素。 - Ryan
你能在你的机器上实例化一个普通的XMLHttpRequest吗?尝试使用xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");,看看是否有相同的错误。 - Andy E
@Andy E:当我输入你的代码行时,我得到了相同的错误。你可能有所发现。 - Ryan
@Ryan:看起来你已经禁用了本地XMLHttp支持和ActiveX控件,但我不是完全确定(因此没有将其发布为答案)。请参阅http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx。 - Andy E
@Andy E:检查IE7的Internet选项,这些功能都应该是启用的。正如我所说,当我首次访问页面时,会出现此错误,但如果我刷新页面,则不会出现任何错误。 - Ryan
6个回答

8
如果有人因为遇到同样的错误而找到了这个页面 - 我刚刚发现了IE7失败并在刷新后成功出现“权限被拒绝”错误的另一个原因/解决方案。
请确保如果您在< head >标签中使用此代码:
```<meta http-equiv="X-UA-Compatible" content="IE=edge">```
将其放在其他< meta >元素之前,否则可能会导致错误。
<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

我遇到了同样的问题。

我采用了一个解决方法来解决这个问题。我编写了代码,使用XMLHttpObject、onreadystatechange等方式进行ajax调用,而不使用jQuery。然后我使用jQuery解析XML。

由于某些原因,jQuery的ajax在IE7上效果不佳。

在IE7中你不会真正得到错误信息,但是如果你进行调试,就会发现服务器没有被访问,或者代码永远不会进入成功的块。


0

在jquery 1.9.1中有一行代码,但之后没有被使用,却会抛出异常:

这只会发生在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;
        }
    };

0

最新编辑

我在这里找到了一些相关讨论: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中从未被发布...可能是由于“权限被拒绝”错误。 - Ryan
什么是前置帖子?另外,你有DC吗 -- 可能是IE正在使用Windows身份验证而另一个没有 -- 你作为非Windows用户拥有权限,但你的域名没有权限。 - Hogan
我已经编辑了我的原始帖子,包括两个浏览器的 Fiddler 日志。 - Ryan
@Ryan:看看我的最新编辑,我相信我找到了一个可以解决你问题的参考资料。 - Hogan
@Ryan:实际上,我对该页面的阅读表明这是Fiddler的预期行为。因为IE使用本地缓存版本,它从不检查服务器,因此从不在Fiddler中显示。 - Hogan
显示剩余2条评论

0

你的页面可能存在一些不合适的内容,我遇到这个问题的原因是在同一个页面上同时使用JqueryTool API和document.write("<style></style")


0

我在使用jQuery中的AJAX调用时也遇到了IE7的问题。我找出了我的问题所在,但不确定它是否与你的问题有关。

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

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

这个在除了shIEt之外的所有地方都可以工作。

一旦我添加了协议并去掉了额外的斜杠,所有东西就正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接