Pregunta

Escribir mi primera aplicación jQTouch. Cuando voy de #login a #home, una llamada AJAX JSON pasa con éxito pero el evento pageAnimationEnded parece estar en un bucle infinito.

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

            });

        });

llamada de inicio de pasador que intercepta jQuery y AJAX se convierte en:

  <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>

¿Alguna pista sería apreciado, gracias por adelantado! : -)

Actualizar

Al parecer .ajaxComplete recieves eventos para otros elementos. He añadido un guardia para filtrar el caso de que yo quiero:

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

             });
        });
¿Fue útil?

Solución

Ya esto definitivamente va a provocar un bucle infinito. Suponiendo que el pageAnimationEnd inicial es de alguna manera activa, esto es lo que está haciendo:

Animación extremos, por lo que su método de enlace hace una llamada AJAX. Esa llamada Ajax tiene una devolución de llamada registrada en ajaxComplete() finalización que dice "ir a casa". Esta casa ir presumiblemente hace algún tipo de animación, que, en disparadores realizar la llamada Ajax. Esa llamada Ajax tiene una devolución de llamada registrada en ajaxComplete() finalización que dice "ir a casa" ... y así sucesivamente.

Probablemente lo que quiere no es un ajaxComplete() genérico que es llamada a todas las peticiones Ajax, pero uno específico en su código de inicio de sesión que hace una sola llamada. No estoy exactamente seguro de lo que estamos tratando de lograr, aunque por lo que es difícil darle una solución al problema. Esto debería ser una explicación suficiente para su problema, aunque si he entendido todo correctamente

Otros consejos

No soy muy bueno con jQuery, pero creo que se podría utilizar el $(selector).one(function(){...} para evitar un bucle.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top