سؤال

كتابة أول تطبيق 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:

  <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 تم تشغيله بطريقة أو بأخرى ، إليك ما تفعله:

تنتهي الرسوم المتحركة ، وبالتالي فإن طريقة الربط الخاصة بك تقوم مكالمة AJAX. أن مكالمة AJAX لها رد اتصال مسجل عند الانتهاء ajaxComplete() هذا يقول "اذهب إلى المنزل". من المفترض أن هذه العودة إلى المنزل تقوم بعمل نوع من الرسوم المتحركة ، والتي ، على كامل مكالمة AJAX الخاصة بك. أن مكالمة AJAX لها رد اتصال مسجل عند الانتهاء ajaxComplete() هذا يقول "اذهب إلى المنزل" ... وبعد.

من المحتمل أن ما تريده ليس عام ajaxComplete() الذي يتم استدعاؤه على جميع طلبات Ajax ، ولكن واحد محدد على رمز تسجيل الدخول الخاص بك الذي يقوم بإجراء مكالمة واحدة. لست متأكدًا تمامًا مما تحاول تحقيقه على الرغم من أنه من الصعب إعطائك حلاً للمشكلة. يجب أن يكون هذا تفسيرًا كافيًا لمشكلتك على الرغم من أنني إذا فهمت كل شيء بشكل صحيح

نصائح أخرى

أنا لست جيدًا جدًا مع jQuery ولكني أعتقد أنه يمكنك استخدام $(selector).one(function(){...} لمنع حلقة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top