2010-05-26 6 views
2

J'ai un problème étrange avec mon Javascript dans Firefox 3.0.x. Dans Firefox 3.0.12, la page est constamment rechargée dès que le corps de la liste est chargé. Ni Firefox 3.5, ni Safari 4 ni Chrome 5 (tous sur Mac) ne rencontrent ce problème.Infinite Refresh Loop dans Firefox 3.0

EDIT: J'ai créé un exemple isolé plutôt que de l'extraire de mon code existant.

Le problème était lié à un bogue qui provoquait le rechargement de la page lors de la définition de location.hash sur une chaîne vide dans 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> 

ligne jQuery 5252 (un xhr.send() appel) apparaît dans la console dès que la page rechargements:

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

Répondre

3

Après beaucoup plus de recherche, je suis tombé sur ce blog post, qui mentionne que la définition du hachage de l'emplacement à une chaîne vide dans Firefox 3.0 provoque l'actualisation de la page. La modification de ma chaîne de requête par défaut à "#" plutôt qu'une chaîne vide résout le problème.

+0

Cela ne semble pas résoudre le problème que j'ai sur le navigateur fennec sur OnePlus 1 .. J'ai essayé en remplaçant .load() avec $ .get() et $ (sélecteur) .html. Pourtant, je reçois le même problème. Des pensées ? – pravin

+0

J'ai posté ceci il y a plus de 5 ans. Je suis sûr qu'une tonne a changé dans Firefox, donc il est possible que votre problème soit causé par autre chose. Vous devriez poster une nouvelle question que quelqu'un avec plus d'expérience avec votre installation particulière peut être capable de répondre. –

0

Le plus probable est la fonction en direct car il a un flux constant qui ne se termine jamais jusqu'à une filière La fonction() est appelée. Essayez et le tester avec die().live(...)

Bien que parfois il semble que ça rafraîchit ce qui peut ne pas être le cas, il se peut que le navigateur a mal géré la mémoire et cette boucle peut l'épuiser appelé fuite de mémoire.

une autre raison pourrait être votre page ajax qui charge plusieurs fois.