質問

初めての JQTouch アプリを作成します。から行くとき #login#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);
                });

             });
        });
役に立ちましたか?

解決

ああ、これは間違いなく無限ループを引き起こします。初期だと仮定すると、 pageAnimationEnd 何らかの方法でトリガーされます。次のことを行っています。

アニメーションが終了するので、bind メソッドは ajax 呼び出しを実行します。その ajax 呼び出しには完了時にコールバックが登録されています ajaxComplete() それは「家に帰りなさい」ということです。この go home はおそらくある種のアニメーションを実行し、完了すると ajax 呼び出しをトリガーします。その ajax 呼び出しには完了時にコールバックが登録されています ajaxComplete() それは「家に帰りなさい」ということです...そしてずっと。

あなたが望んでいるのはジェネリックではない可能性があります ajaxComplete() これはすべての ajax リクエストで呼び出されますが、ログイン コードで 1 回の呼び出しを行う特定のリクエストだけが呼び出されます。ただし、何を達成しようとしているのか正確にはわからないので、問題の解決策を提供するのは困難です。私がすべてを正しく理解していれば、これで問題を十分に説明できるはずです

他のヒント

私は JQuery があまり得意ではありませんが、次のものを使用できると思います。 $(selector).one(function(){...} ループを防ぐため。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top