jquery / jqtouch getjson Вызов, вызывая бесконечную петлю?
Вопрос
Написание моего первого приложения 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(){...}
предотвратить петлю.