Frage

meine erste jQTouch App schreiben. Als ich von #login zu #home gehen, geschieht erfolgreich ein JSON Ajax-Aufruf aber das pageAnimationEnded Ereignis wird in einer Endlosschleife sein.

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

            });

        });

Login POST aufrufen, die JQuery abfängt und verwandelt sich in 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>

würde Irgendwelche Hinweise dankbar, danke im Voraus! : -)

UPDATE

Offenbar recieves .ajaxComplete Ereignisse für andere Elemente als auch. Ich habe eine Wache um das Ereignis zu filtern, dass ich will:

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

             });
        });
War es hilfreich?

Lösung

Ya dies wird auf jeden Fall zu einer Endlosschleife führen. Unter der Annahme, dass der anfängliche pageAnimationEnd irgendwie ausgelöst wird, ist hier, was Sie tun:

Animation endet, so dass Ihre bind Methode hat einen Ajax-Aufruf. Das Ajax-Aufruf hat einen Rückruf bei Abschluss ajaxComplete() registriert, die „nach Hause gehen“, sagt. Dieses nach Hause geht vermutlich tut irgendeine Art von Animation, die auf vollständigen Trigger Ihres Ajax-Aufruf. Der Ajax-Aufruf einen Rückruf hat nach Abschluss ajaxComplete() registriert, die „nach Hause gehen“, sagt ... und so weiter.

Wahrscheinlich, was Sie wollen, ist kein generischer ajaxComplete(), die auf allen Ajax-Anfragen aufgerufen wird, sondern ein spezifisches auf Ihren Login-Code, der einen einzigen Anruf tut. Ich bin nicht ganz sicher, was Sie versuchen, obwohl zu erreichen, so ist es schwer, Ihnen eine Lösung für das Problem zu geben. Dies sollte eine ausreichende Erklärung für Ihr Problem sein, obwohl, wenn ich alles richtig verstehen

Andere Tipps

Ich bin nicht sehr gut mit JQuery, aber ich denke, Sie $(selector).one(function(){...} verwenden könnten eine Schleife zu verhindern.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top