IE7中的jQuery AJAX问题(可能还有其他版本)

时间:2010-02-23 14:15:09

标签: jquery ajax internet-explorer-7

任何人都可以告诉我为什么以下代码在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错误,这段代码似乎正常工作。所以就像第一次页面加载这段代码片段错误一样,但之后运行得很好。

::: 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

6 个答案:

答案 0 :(得分:8)

如果人们碰巧找到了这个页面,因为他们遇到了同样的错误 - 我发现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个小时来解决这个问题。

答案 1 :(得分:2)

我遇到了同样的问题。

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

出于某种原因,jQuery的ajax与IE7不兼容。

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

答案 2 :(得分: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/

答案 3 :(得分:0)

我在IE7中的jQuery中也遇到了AJAX调用问题。我发现了我的问题,不确定它是否与你的相关。

我没有将协议放在URL中,并且在IE 7中有额外的斜杠,这样:

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

除了shIEt

以外的其他地方都可以使用

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

答案 4 :(得分:0)

在您的页面中可能存在不适当的内容,我遇到此问题的原因是我在同一页面上使用JqueryTool API时使用document.write("<style></style")

答案 5 :(得分:0)

在jquery 1.9.1中有一行,之后没有使用但会引发异常: 第2582行,jquery-1.9.1.js第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;
        }
    };