JQuery - он не работает в IE7. Кроссбраузерная совместимость?

Я пытался открыть сообщение некоторое время назад об этой проблеме (здесь), думая, что ошибся, делая код. Теперь я более-менее понял, что какая-то версия Jquery с моим кодом не работает в IE7. Что происходит? Я также попытался открыть сообщение на официальном форуме JQuery (ссылка), но никто не ответил. Во всяком случае, на моем старом веб-сайте я работал с jquery-1.3.2.min.js, и у меня не было проблем. Теперь мне нужно использовать функцию .delegate(), поэтому я включаю библиотеку jquery-1.4.2.min.js.

Выше вы можете увидеть обычный код, который я использовал в своем старом приложении:

// html page
<a href="#" onClick="pmNew('1');return false">prova</a>    

// javascript page
function pmNew(mexid) {
    var time = new Date;
    $.ajax({
        type: 'POST',
        url: './folder/ajax.php',
        data: 'mexid='+escape(mexid)+'&id=pmnew',
        success: function(msg) {
            alert(msg);
        }
    });
    return false;
}

// asynchf.php
if($_POST['id']=="pmnew") {
    echo "please, i will just print this";
}

С некоторыми предложениями некоторых пользователей этого сайта я отредактировал эти функции:

// html page
<a href="#" onClick="pmNew('1');return false">prova</a>    

// javascript page
function pmNew(mexid) {
    var time = new Date;
    $.ajax({
        type: 'POST',
        cache: false,
        url: './folder/ajax.php' + '?dummy=' + time.getTime(),
        data: 'mexid='+escape(mexid)+'&id=pmnew',
        success: function(msg) {
            alert(msg);
        }
    });
    return false;
}

// asynchf.php
if($_POST['id']=="pmnew") {
    echo "please, i will just print this";
}

Но он ПО-ПРЕЖНЕМУ НЕ РАБОТАЕТ на IE7. Firefox, Chrome, это круто. Он работает в IE7, только если я загружаю страницу, пытаюсь (и получаю сообщение об ошибке), перезагружаю (F5) и повторяю попытку. Или, как я уже говорил, я меняю версию Jquery :)

Я загрузил тестовую страницу на реальный сервер (чтобы вы могли самостоятельно проверить эту проблему): нажмите здесь

Я надеюсь, что кто-то может помочь мне с этой большой проблемой.

Ваше здоровье


person markzzz    schedule 20.09.2010    source источник
comment
Каково фактическое сообщение об ошибке?   -  person Russ Clarke    schedule 20.09.2010
comment
Эм. Ничего не возвращает. Я думаю, что это вызов ajax. IE говорит Код: 0 Отказано в доступе   -  person markzzz    schedule 20.09.2010
comment
Как уже говорили другие, вам, вероятно, следует проверить Fiddler, fiddler2.com/fiddler2. Это покажет вам, что IE на самом деле пытается отправить на вашу страницу PHP.   -  person Russ Clarke    schedule 20.09.2010
comment
Я также пытался написать ipv4.fiddler, чем localhost в браузере, но когда я нажимаю на эту функцию, ничего не появляется...   -  person markzzz    schedule 20.09.2010
comment
Эм. Я загрузил эту страницу на реальный сервер. Вы можете проверить на gabbatracklistworld.com/index.php?general=example4   -  person markzzz    schedule 20.09.2010


Ответы (2)


Причина этой ошибки заключается в том, что когда вы используете относительные URL-адреса в IE7, он фактически добавляет ваш базовый URL-адрес (или откуда загружается ваша страница, например, если вы размещаете относительный URL-адрес на своей домашней странице, ваш относительный URL-адрес на самом деле будет http://gabbatracklistworld.com/http://gabbatracklistworld.com/folder/ajax.php)

Я только что наткнулся на ваш вопрос здесь, на SO, когда искал решение той же проблемы, с которой я столкнулся несколько минут назад. На самом деле есть статья из блога Microsoft, в которой объясняет, как IE7 обрабатывает относительные URL-адреса (что забавно, потому что это просто показывает, что они гордятся тем, как работает их дурацкий браузер). Видя, что у вас еще нет ответа, я бы поместил свое решение здесь для дальнейшего использования, а также для других разработчиков.

Что я сделал, так это использовал substring() для удаления экземпляров моего базового URL-адреса, заставляя запрос ajax использовать фактический относительный URL-адрес.

person lock    schedule 22.09.2010
comment
Да, наверное, в этом проблема. Но почему это работает с jquery-1.3.2.min.js? - person markzzz; 23.09.2010

Можете ли вы добавить этот аргумент в свои параметры .Ajax:

error:function(xhr, status, errorThrown) {
            alert(errorThrown+'\n'+status+'\n'+xhr.statusText);
        }, 

и ответить сообщением?

person Russ Clarke    schedule 20.09.2010
comment
Это позор; Я надеялся, что это может быть связано с этим: forum.jquery. com/topic/fix-jquery-ajax-errors-in-ie - person Russ Clarke; 20.09.2010
comment
эм... но почему? Он отлично работает на jquery-1.3.2.min.js ... хе-хе! Я загрузил страницу онлайн, проверьте ее по ссылке... - person markzzz; 20.09.2010
comment
Это была скорее догадка. К сожалению, у меня здесь нет окна IE7, но Fiddler должен работать, я подозреваю, что вам нужно будет настроить его как прокси-сервер, чтобы он мог захватывать пакеты. На этой странице есть некоторые сведения, которые могут помочь: fiddler2.com/fiddler/help/hookup.asp - person Russ Clarke; 20.09.2010
comment
Еще одна мысль, что будет, если убрать точку в начале пути? - person Russ Clarke; 20.09.2010
comment
Если я уберу точку, то же самое. На самом деле это не помогает...! Что касается Fiddler, у меня есть некоторые проблемы с локальным хостом. Итак, я загрузил страницу на реальный сервер. Сейчас он захватывает трафик, но ничего не захватывает, когда я вызываю эту функцию. Действительно, я не знаю, что случилось. Я думал, что на моем компьютере вирус, но мой друг получил ту же ошибку на другом компьютере и в том же браузере. Очень загадка для меня... - person markzzz; 20.09.2010