Rails 3 UJS запускает цикл while при ожидании ajax:callback

Это мой JavaScript для :remote => true форма.

В настоящее время при отправке формы эта функция запускается один раз. (ширина увеличивается на 5%.

Однако я хочу, чтобы эта анимация работала в цикле, так что ширина будет увеличиваться с шагом 5%, пока я не получу обратный вызов ajax:success или ajax:fail, после чего я хочу перейти к другой функции.

$('#new_message').bind('ajax:loading', function() {
  $('#send_bar').animate({
    width: '+=5%'
  });
});

1 ответ

Решение

Объявите функцию, которая запускает анимацию, а затем в параметре завершения передайте функцию так, чтобы она вызывала себя рекурсивно:

var start_animation = function() {
  $('#send_bar').animate({width: '+=5%'}, 5000, 'linear', start_animation);
}

В функции загрузки вызовите функцию, чтобы начать анимацию:

$('#new_message').bind('ajax:loading', function() {
  start_animation();
});

Тогда в вашей привязке к ajax:success и ajax:fail, вызовите stop:

$('#new_message').bind('ajax:success', function() {
  $('#send_bar').stop();
});

$('#new_message').bind('ajax:failure', function() {
  $('#send_bar').stop();
});
Другие вопросы по тегам