#ajax #http #firefox #post #internet-explorer-7
#ajax #http #firefox #Публикация #internet-explorer-7
Вопрос:
Я столкнулся с ошибкой в Firefox, связанной с некоторой несинхронизированной информацией в моей форме при использовании кнопки перезагрузки после изменения некоторых данных формы (через AJAX).
В IE (7) обновление, похоже, всегда повторно отправляет первоначально отправленные данные. Итак, если я загружаю форму, которая затем модифицируется с помощью JS / AJAX и обновляется, я вижу то, что я видел при первой загрузке.
В Firefox (4) я склонен (по крайней мере, в этом случае) видеть более новые данные. Однако, поскольку я пренебрег обновлением определенных элементов формы, форма, похоже, повторно отправляется с частично неверными данными, что в данном случае потенциально приводит к серьезной путанице.
Мой вопрос в том, в чем именно разница между тем, как Firefox и IE обрабатывают повторную публикацию? Задокументировано ли это где-нибудь? Является ли любой способ более стандартным? А как насчет других браузеров?
Редактировать: Возможно, стоит отметить, что Firefox также, похоже, повторно отображает только определенные элементы (в моем случае изменяется класс метки, но не отключенный статус ввода). Есть ли в Firefox специальные правила для того, как он обновляет DOM при обновлении и повторной публикации?
Я проверил возврат из (повторного) СООБЩЕНИЯ в FF и подтвердил, что у него какое-то необычное поведение. В источнике возврата я получаю этот бит:
<label id="delSheetContainer"
title="Estimate Sheets with Schedule Activities in the past may not be deleted."
class="">
<input id="delSheet" name="delSheet"
type="checkbox"
tabindex="3"
value="false"
//Inserted note: this is where the disabled value would have been
onclick="this.value=(this.value amp;amp; 1); bSave=true; setBtn(this.checked);"
/>Delete Sheet
</label>
Но в браузере (и Firebug) я вижу все еще отключенный флажок. Однако метка была должным образом обновлена. Кто-нибудь может также подробно описать это поведение? (ссылки приветствуются!)
Редактировать: Как объяснил Борис, Firefox поддерживает «состояние формы» при обновлениях. На самом деле моя проблема вызвана этим фактом; сервер возвращает правильные данные, но Firefox в любом случае поддерживает состояние формы.
Комментарии:
1. Теперь я чувствую себя более запутанным, чем раньше… В ближайшее время мне нужно будет провести еще несколько тестов, чтобы я мог понять это более четко… Я обновлю вопрос дополнительно, когда это произойдет.
Ответ №1:
Трудно сказать наверняка, какой эффект вы видите здесь, основываясь на описании, но когда вы выполняете перезагрузку (не принудительную перезагрузку) Firefox сохранит значения измененных входных данных формы такими, какими они были до перезагрузки.
Итак, если у вас есть страница с такой разметкой:
<input name="x">
и пользователь вводит «foo» в текстовое поле, а затем перезагружается, ввод после перезагрузки по-прежнему будет содержать строку «foo».
Это относится к скрытым входным данным, значения которых также изменяются с помощью JavaScript, что вполне может объяснить наблюдаемое вами поведение.
На самом деле не существует стандартного поведения перезагрузки.
Комментарии:
1. @Boris Спасибо, это имеет смысл. Есть мысли по поводу рендеринга?
2. @Boris Похоже, что не обновленные элементы на самом деле не вызывают разницы в рендеринге (см. Редактирование). Редактировать: на самом деле, я не уверен… подождите…
3. @Boris проблема, с которой я сталкиваюсь, заключается в том, что форма, которая публикуется первой для перехода на страницу, отличается от формы на странице, поэтому обновление элемента формы с помощью getElementById не работает.
4. @dafrazzman Что сохраняется при перезагрузках, так это «состояние формы». Это включает измененные значения, измененное отключенное состояние для элементов управления формой, измененное проверенное состояние для радиостанций и флажков и несколько других вещей. Все остальное перезагружается из кэша или сети. Это объясняет поведение, которое вы видите с классами меток по сравнению с отключенными значениями ввода.
5. Хм. Вы можете принудительно не восстанавливать состояние определенного элемента управления, установив для него значение автозаполнения =»выкл.». Это, конечно, также отключает автозаполнение формы для этого элемента управления. Вы также можете отключить это для страницы в целом, установив для нее значение cache-control:no-store, но это также отключает различное кэширование.