art_web
@art_web

Как решить проблему дублирования ajax запроса?

Для перехода между страницами использую ajax плагин "smoothState". На всех страницах сайта есть форма, данные из этой формы отправляю ajax. Проблема в том, что при переходе между страницами и повторной отправкой данных формы, письма отправляются столько, сколько было переходов. Кто нибудь сталкивался с этим или может подсказать в чем проблема?

$(function() {
  $win = $(window);
  $doc = $(document);
  $aniBody = $('html, body');
  $body = $('body');

  smState = $('#smoothState').smoothState({
    prefetch: true,
    pageCacheSize: 5,
    onStart: {
      duration: 400,
      render: function(url, container) {
        container.removeClass('scaleUp').addClass('scaleDown');
        setTimeout(function() {
          container.addClass('loading');
        }, 200);
        $aniBody.animate({
          scrollTop: 0
        });
      }
    },
    onEnd: {
      duration: 400,
      render: function(url, container, content) {
        var bodyClass = window.location.pathname.split('/')[1];
        if (bodyClass == '') {
          bodyClass = 'index'
        }
        $body.attr('class', bodyClass);
        container.html(content).removeClass('scaleDown loading').addClass('scaleUp');
        setTimeout(function() {
          container.removeClass('scaleUp')
        }, this.duration);
      }
    },
    callback: function(url, container, content) {
      $doc.trigger('content:update')
    }
  }).data('smoothState');
});

$doc.on('content:update', function() {
  $("#ajaxform").submit(function() {
    var form = $(this);
    var data = form.serialize();
    $.ajax({
      type: 'POST',
      url: 'mail.php',
      dataType: 'json',
      data: data,
      beforeSend: function(data) {
        $('[data-remodal-id=modal]').remodal().close();
      },
      success: function(data) {
        if (data['error']) {
          alert(data['error']);
        } else {
          alert("Отправлено");
        }
      },
      error: function(xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
      }
    });
    return false;
  });
});
$doc.trigger('content:update');
  • Вопрос задан
  • 695 просмотров
Решения вопроса 1
на каждое событие content:update вы создаете новый обработчик сабмита формы, соответственно, получаете такое же количество запросов. Зачем вам обработчик content:update?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
art_web
@art_web Автор вопроса
Это кастомный документ: реди, выполняется при каждой ajax загрузке страницы. В нем другие еще плагины есть, которые изображения обрабатывают.
Спасибо! Вытащил отправку за пределы "content:update" и дублирование сообщений исчезло
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы