JQuery AJAX проблема в IE7 (возможно, и в других версиях) - PullRequest
6 голосов
/ 23 февраля 2010

Может ли кто-нибудь объяснить мне, почему следующий код не будет работать в 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;
    }
  });
});

Ошибка JavaScript, которую выдает IE, - «Отказано в доступе»

Если я удаляю этот бит кода из файла JS для рассматриваемой страницы, страница работает просто отлично, ошибок нет, поэтому ошибка заключается в том бите кода, который я считаю.

::: UPDATE :::

Что-то еще немного странное - когда я обновляю страницу (в IE7), я не получаю ошибок javascript, и этот код, кажется, работает правильно. Так что, как будто в первый раз страница загружает этот фрагмент кода ошибки, но после этого он работает просто отлично.

::: UPDATE :::

Вот сообщения Fiddler для этой страницы из 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 ]

8 голосов
/ 04 декабря 2010

если люди находят эту страницу из-за одной и той же ошибки - я просто нашел другую причину / решение для 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 голосов
/ 23 февраля 2010

Я столкнулся с той же проблемой.

Я решил эту проблему. Я написал код для выполнения вызова ajax без использования jQuery (создал XMLHttpObject, onreadystatechange и т. Д.). Затем я использовал jQuery для разбора XML.

По какой-то причине ajax jQuery плохо работает с IE7.

На самом деле вы не получаете ошибку в IE7, но если вы отладите ее, то увидите, что сервер никогда не попадет и код никогда не достигнет блока успеха.

0 голосов
/ 19 апреля 2013

в jquery 1.9.1 есть строка, которая впоследствии не используется, но выдает исключение: строка 2582, столбец 4 в jquery-1.9.1.js

это происходит только для IE7, а не IE8 или выше, и останавливает загрузку остальной части jquery. используя режим совместимости IE7 в IE9, я нашел строку кода, генерирующую исключение, а затем закомментировал его в 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 голосов
/ 03 сентября 2012

На вашей странице может быть что-то неуместное, причина, по которой я столкнулся с этой проблемой, заключается в том, что я использую document.write("<style></style"), когда использую API JqueryTool на той же странице.

0 голосов
/ 25 октября 2010

У меня также была проблема с вызовом AJAX в jQuery в IE7. Я узнал, в чем заключалась моя проблема, и не уверен, связано ли это с вашей или нет.

Я не помещал протокол в URL и у меня были дополнительные косые черты в IE 7, например:

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

, который работает везде, кроме shIEt

Как только я добавил протокол и убрал лишние косые черты, все заработало нормально.

0 голосов
/ 23 февраля 2010

новейшая редакция

Я нашел кое-что об этом здесь: http://zacster.blogspot.com/2008/10/jquery-ie7-load-url-problem.html и другие места. Кажется, проблема связана с кешем IE7. Если вы сделаете URL уникальным, это может решить проблему (например, добавьте timenow = 09472345 в конец строки запроса.)

первоначальный ответ

Вы уверены, что имя .asp? Я ожидаю увидеть .aspx или какое-то другое расширение, обработанное .net Если это то, что вам нужно, вам, вероятно, нужно включить .asp в IIs

тогда я снова читаю вопрос

Я вижу, что он работает в других браузерах, поэтому это не может быть моим первоначальным комментарием ... скачайте fiddler и посмотрите, чем запрос отличается от IE и других браузеров.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...