2 Stimmen

Unendliche Aktualisierungsschleife in Firefox 3.0

Ich habe ein seltsames Problem mit meinem Javascript in Firefox 3.0.x. In Firefox 3.0.12 wird die Seite ständig neu geladen, sobald der Listenkörper geladen ist. Weder Firefox 3.5, Safari 4 noch Chrome 5 (alle auf Mac) haben dieses Problem.

EDIT : Ich habe ein isoliertes Beispiel erstellt, anstatt dies aus meinem bestehenden Code zu übernehmen.

Das Problem stand im Zusammenhang mit einem Fehler, der dazu führte, dass die Seite neu geladen wurde, wenn location.hash in FF 3.0 auf eine leere Zeichenfolge gesetzt wurde.

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-Zeile 5252 (ein xhr.send()-Aufruf) wird in der Konsole angezeigt, sobald die Seite neu geladen wird:

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

3voto

Martin Gordon Punkte 36034

Nach längerem Suchen bin ich auf Folgendes gestoßen Blog-Eintrag die besagt, dass das Setzen des Standort-Hashes auf eine leere Zeichenfolge in Firefox 3.0 dazu führt, dass die Seite aktualisiert wird.

Wenn ich meinen Standard queryString auf "#" statt auf eine leere Zeichenfolge ändere, ist das Problem behoben.

0voto

Val Punkte 16780

Höchstwahrscheinlich handelt es sich um die Live-Funktion, da sie einen konstanten Fluss hat, der nie endet, bis eine die()-Funktion aufgerufen wird. versuchen Sie es mit die().live(...)

auch wenn es manchmal so aussieht, als würde es sich aktualisieren, kann es sein, dass der Browser den Speicher schlecht behandelt hat und die Schleife ihn erschöpft, was als Speicherleck bezeichnet wird.

Ein weiterer Grund könnte Ihre Ajax-Seite sein, die viele Male geladen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X