Бесконечный цикл обновления в Firefox 3.0 - PullRequest
2 голосов
/ 26 мая 2010

У меня странная проблема с моим Javascript в Firefox 3.0.x. В Firefox 3.0.12 страница постоянно перезагружается, как только загружается тело списка. Ни Firefox 3.5, ни Safari 4, ни Chrome 5 (все на Mac) не сталкиваются с этой проблемой.

РЕДАКТИРОВАТЬ : я создал отдельный пример, а не извлекаю его из моего существующего кода.

Проблема была связана с ошибкой, из-за которой страница перезагружалась при установке location.hash в пустую строку в FF 3.0. test.js

function welcomeIndexOnLoad() {
  $("#options a").live('click', function () {
    optionClicked($(this), "get_list_body.html");
    return false;
  });

  $(document).ready(function() {
    optionClicked(null, "get_list_body.html");
  });
}

function optionClicked(sender, URL) {
  queryString = "";
  if (sender != null) {
    queryString = $(sender).attr("rel");
  }
  $("#list_body").load(URL + "?" + queryString, function(resp, status, AJAXReq) {
    console.log(resp);
    console.log("" + status);
    location.hash = queryString;
  });
}​

test.html

<html>
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
  <script type="text/javascript" src="test.js"></script>
  <script>
    welcomeIndexOnLoad();
  </script>
</head>

<body>
<div id="container">
  Outside of list body.
  <div id="list_body">
  </div>
</div>
</body>
</html>

get_list_body.html

<h3>
  <div id="options">
    <a href="#" rel="change_list">Change List</a>
  </div>
<ul>
  <li>li</li>
</ul>

jQuery строка 5252 (вызов xhr.send ()) появляется в консоли, как только страница перезагружается:

xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );

Ответы [ 2 ]

3 голосов
/ 26 мая 2010

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

Устранение проблемы по умолчанию для параметра queryString на "#" вместо пустой строки.

0 голосов
/ 26 мая 2010

Скорее всего, это живая функция, так как она имеет постоянный поток, который никогда не заканчивается, пока не будет вызвана функция die (). попробуй и проверь с die().live(...)

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

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

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