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);
                });

             });
        });
Était-ce utile?

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.

http://api.jquery.com/one/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top