jquery / jQTouch getJSON appeler provoquant boucle infinie?
Question
L'écriture de ma première application jQTouch. Quand je vais de #login
à #home
, un appel ajax JSON arrive avec succès, mais l'événement pageAnimationEnded
semble être dans une boucle infinie.
$(function(){
$('#login').ajaxComplete(function (e, xhr, settings) {
jQT.goTo('#home', 'flip');
});
$('#home').bind('pageAnimationEnd', function(e, info){
alert('animation ended'); //infinite loop happens in here
$.getJSON('/test', function(data) {
alert('json: ' + data); //this returns data successfully
});
});
});
Appel Connexion POST qui intercepte et tours JQuery en AJAX:
<div id="login" class="current">
<div class="toolbar">
<h1>testapp</h1>
<a class="button slideup" id="infoButton" href="#about">About</a>
</div>
<form:form commandName="user" action="/login/authenticate">
<ul class="edit rounded">
<li><form:input path="email"/></li>
<li><form:password path="password" /></li>
<li>Remember Me<span class="toggle"><input type="checkbox" /></span></li>
</ul>
<a style="margin:0 10px;color:rgba(0,0,0,.9)" href="" class="submit whiteButton">Login</a>
</form:form>
</div>
Les conseils serait appréciée, merci à l'avance! : -)
UPDATE
Apparemment .ajaxComplete pour d'autres événements recieves éléments. J'ai ajouté un garde pour filtrer l'événement que je veux:
$(document).ready(function(e){
alert('document ready');
$('#login').ajaxComplete(function (e, xhr, settings) {
if(settings.url == '/login/authenticate') { //add check to prevent infinite loop
alert('jqt goto ' + settings.url);
jQT.goTo('#home', 'flip');
}
});
$('#home').bind('pageAnimationEnd', function(e, info){
alert('animation ended');
$.getJSON('/test', function(data) {
alert('json: ' + data);
});
});
});
La solution
Ya cela va certainement provoquer une boucle infinie. En supposant que le pageAnimationEnd
initial est déclenché en quelque sorte, voici ce que vous faites:
animation se termine, de sorte que votre méthode bind un appel ajax. Cet appel ajax a un rappel enregistré à la fin ajaxComplete()
qui dit « maison go ». Cette maison vont sans doute fait une sorte d'animation, qui, sur les déclencheurs compléter votre appel ajax. Cet appel ajax a un rappel inscrit sur ajaxComplete()
d'achèvement qui dit « rentrer à la maison » ... et ainsi de suite.
Probablement ce que vous voulez est pas un ajaxComplete()
générique qui est appelé à toutes les demandes ajax, mais un spécifique sur votre code de connexion qui fait un seul appel. Je ne sais pas exactement ce que vous essayez d'atteindre si il est difficile de vous donner une solution au problème. Cela devrait être une explication suffisante à votre problème mais si je comprends tout correctement
Autres conseils
Je ne suis pas très bon avec JQuery mais je pense que vous pouvez utiliser le $(selector).one(function(){...}
pour éviter une boucle.