2013-06-24 2 views
0

У меня возникли проблемы только с firefox. На моей странице отображается древовидная структура, загружаемая через ajax, когда пользователь нажимает на узлы, которые они хотят развернуть. Проблема, с которой я столкнулся с firefox и только firefox, заключается в том, что она расширит узлы при загрузке первой страницы. Но после этого firefox кэширует его странно, а заголовок узла, а не дочерний, запроса ajax переносится на новую страницу. Это проблема, потому что заголовок узла, который переносится, содержит информацию, которая определяет, восстановил ли узел его дочерние элементы.Проблема с Firefox bfcache?

<div class="node topbar" 
    <input type="hidden" id="foo" name="hasretrievedchildren" value="1"/> 
... 
</div> 

Должно быть как на первой странице нагрузки.

<div class="node topbar" 
    <input type="hidden" id="foo" name="hasretrievedchildren" value="0"/> 
... 
</div> 

Мой Javascript проверяет ненулевое значение на этом входе для вызова AJAX.

Это проблема bfcache? Я привести к считаю, что это не потому, что я добавил

window.onunload = function(); 

в файл JS и в теге сценария, и ни один не установил его, который эта статья https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching говорит должно привести к аннулированию bfcache.

Я использую asp.net MVC 4, и я попытался использовать MVCdonutcaching, чтобы установить эту страницу и частичные представления, чтобы не кэшировать. Но это тоже не сработало.

ответ

0

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

0

Возможно, это bfcache, может быть, нет. Мне пришлось столкнуться с той же проблемой некоторое время назад. Кеши браузера вызывали странное поведение в наших формах, и это влияло на ожидаемые результаты страницы. Немного, чтобы решить это. Что-то, что вы можете сделать, чтобы всегда загружать программу, правильное значение (при условии, что вы загружаете ее) - это инициализировать значение через ваш Javascript.

Если вы используете JQuery, вы должны использовать:

<script type="text/javascript"> 
    $(document).ready(){ 
     //Assign your items values here 
    } 
<script> 

Вы также можете использовать обработчик OnLoad в JS.

Надеюсь, это поможет.

Смежные вопросы