jquery / jqtouch getjson Вызов, вызывая бесконечную петлю?

StackOverflow https://stackoverflow.com/questions/3423984

  •  26-09-2019
  •  | 
  •  

Вопрос

Написание моего первого приложения 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 как-то срабатывает, вот что вы делаете:

Анимация заканчивается, поэтому ваш метод BING делает вызов AJAX. Что Call ajax имеет обратный вызов, зарегистрированный по завершении ajaxComplete() что говорит «иди домой». Это домой домой, по-видимому, какая-то анимация, которая, на полных запускающих вызов вашего AJAX. Что Call ajax имеет обратный вызов, зарегистрированный по завершении ajaxComplete() Что говорит «Иди домой» ... и на и дальше.

Вероятно, что вы хотите, не является общим ajaxComplete() который вызывает все запросы AJAX, но конкретный на вашем входном коде, который делает один вызов. Я не совсем уверен, что вы пытаетесь добиться, поэтому трудно дать вам решение проблемы. Это должно быть достаточным объяснением вашей проблемы, хотя, если я все правильно понимаю

Другие советы

Я не очень хорошо с jQuery, но я думаю, что вы могли бы использовать $(selector).one(function(){...} предотвратить петлю.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top