Прототип Ajax.Updater на самом деле не обновляется в IE7 - PullRequest
2 голосов
/ 15 апреля 2009

Я пытаюсь отправить форму, используя Ajax.Updater , и у меня есть результат этого обновления элемента div на моей странице.

Все отлично работает в IE6, FF3, Chrome и Opera. Тем не менее, в IE7 это время от времени работает, но чаще всего просто ничего не делает.

Вот JavaScript:

function testcaseHistoryUpdate(testcase, form) {
document.body.style.cursor = 'wait';
var param = Form.serialize(form);
new Ajax.Updater("content", "results/testcaseHistory/" + testcase, {
    onComplete: function(transport) {document.body.style.cursor = 'auto'}, 
    parameters: param,
    method: 'post'
    }
);
}

Я подтвердил, используя alert() вызовы, что параметр установлен на то, что я ожидал.

Во многих местах я читал, что IE7 активно кэширует и что это может быть основной причиной, однако каждый раз после добавления следующего в мой php-ответ он все равно не работает.

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Чтобы попытаться исправить проблему с кэшированием, я попытался добавить фиктивный параметр, который просто заполняется случайным значением, чтобы иметь разные параметры для каждого вызова, но это не помогло.

Я также нашел этот , где UTF-8, казалось, вызывал проблему с IE7, но моя страница была четко помечена:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Кто-нибудь знает, что может быть не так с IE7, в отличие от других браузеров, которые я тестировал, чтобы вызвать такую ​​проблему?

Ответы [ 6 ]

2 голосов
/ 27 мая 2009

Похоже, что вы не можете обновить элемент DOM id, который находится внутри тега формы в ie. Кто-нибудь нашел способ обойти это? Мой код работает нормально, когда я перемещаю его за пределы тега формы, а также когда я просто закомментирую тег формы и не перемещаю элемент DOM.

1 голос
/ 06 июня 2009

Не относится к проблеме AJAX, но в IE, если вы попытаетесь обновить встроенный элемент с элементами уровня блока, он выдаст ошибку. Чтобы проверить, относится ли это к вам, оберните ваш код следующим текстом:

try {
// Your code
// something.update('...');
} catch(error) {
alert(error.descripton)
alert(error.number)
}

Если вы получили ошибку -2146827687, измените html, чтобы обновлять элементы уровня блока элементами уровня блока.

1 голос
/ 16 апреля 2009

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

0 голосов
/ 08 марта 2010

IE глуп, когда дело доходит до кеширования. У меня была небольшая страница «помощника», в которой не было целого html / body и т. Д. Поэтому я не мог вставить свои обычные анти-кеширующие вещи.

Хотя идея URL var работает.

    var cacheBuster = parseInt(Math.random() * 99999999); // cache buster
    new Ajax.Updater(elementId, '/Helpers/PendingChanges.aspx?Cache=' + cacheBuster);

Кроме того, в IE8 я получал «неопределенную ошибку», пока не добавил строку о кодировке.

0 голосов
/ 03 июня 2009

Конечно, пахнет для меня проблемой кеширования. Вы правы в том, что IE7 (и IE6) кэшируют очень агрессивно, особенно вызовы AJAX, и часто неправильно игнорируют заголовки управления кэшем.

Обычное исправление заключается в добавлении случайного параметра «cachebuster» к URL (не в качестве дополнительной переменной POST).

0 голосов
/ 03 июня 2009

У меня точно такая же проблема!

После долгих проб и ошибок я выяснил, что происходит:

IE выполняет вызов Ajax, обрабатывает файл PHP, но НЕ выполняет показать что-нибудь на экране!

Ничего «эхо» или «печать» в файле PHP не отображается на div (target = 'hidden-div), ни onComplete "alert" не отображается на экран!

НО, все вызовы MySQL работают, я добавил некоторый код для добавления и / или удалите некоторые записи foobar в моей базе данных, и они все заработали!

Может ли это быть проблемой кэширования IE?

...