3

编写我的第一个 JQTouch 应用程序。当我从#loginto 开始时#home,JSON ajax 调用成功发生,但pageAnimationEnded事件似乎处于无限循环中。

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

            });

        });

JQuery 拦截并转换为 AJAX 的登录 POST 调用:

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

任何提示将不胜感激,在此先感谢!:-)

更新

显然 .ajaxComplete 也接收其他元素的事件。我添加了一个守卫来过滤我想要的事件:

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

             });
        });
4

2 回答 2

2

是的,这肯定会导致无限循环。假设初始pageAnimationEnd以某种方式被触发,这就是你正在做的事情:

动画结束,因此您的 bind 方法执行 ajax 调用。该 ajax 调用在完成ajaxComplete()时注册了一个回调,上面写着“回家”。这个回家大概会做某种动画,它在完成时会触发你的ajax调用。该ajax调用在完成ajaxComplete()时注册了一个回调,上面写着“回家”......等等。

您想要的可能不是ajaxComplete()在所有 ajax 请求上都被调用的泛型,而是在您的登录代码上执行单个调用的特定请求。不过,我不确定您要达到的目标是什么,因此很难为您提供解决问题的方法。如果我正确理解所有内容,这应该足以解释您的问题

于 2010-08-06T13:29:14.603 回答
1

我对 JQuery 不是很好,但我认为你可以使用$(selector).one(function(){...}来防止循环。

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

于 2010-08-06T13:21:20.917 回答