Измененные параметры не передаются в модальное окно fancybox?

Есть форма-калькулятор.

Результат работы - открытие модального окна Fancybox в режиме фрейма.

Т.е. пользователь заполняет форму, на кнопке генерится data-src такого вида: "/.ajax/call.p3?x1=20&x2=20&dl_long=2000". При клике на кнопку открывается модальное окно.

Параметры корректно передаются только 1 раз, после загрузки страницы. Т.е., если закрыть модальное окно, изменить параметры в форме, кликнуть на кнопке с обновленным data-src, передадутся параметры, которые были при первом клике кнопки.

Код:

$(document).ready(function() {
  function calcParam() {
    calc = $('.calc__form').serialize();
    $('.calc__submit').attr('data-src', '/.ajax/call.p3?' + calc);
    //alert(calc);
    console.log(calc);
    $.ajax({
      type: 'POST',
      url: '/.ajax/calc/otlivy.p3',
      data: calc,
      success: function(msg) {
        $(".calc__amount").html(msg);
      },
      error: function() {}
    });
  }

  $('.calc__form').on('input', function() {
    calcParam();
  })
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<link href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>
<form method="post" class="calc__form">
  <input name="coef" value="1" type="hidden">
  <input name="xparam" value="2" type="hidden">
  <div class="calc__form--line">
    <div>
      <div class="calc__form--label">
        Длина X1:
      </div>
      <div class="calc__form--field"><input name="x1" type="text" value="20" class="onlydigits calc__form--input"><span class="mm">мм<span></span></span>
      </div>
    </div>
    <div>
      <div class="calc__form--label">
        Длина X2:
      </div>
      <div class="calc__form--field"><input name="x2" type="text" value="20" class="onlydigits calc__form--input"><span class="mm">мм<span></span></span>
      </div>
    </div>
  </div>
  <button class="btn anim calc__submit" data-type="iframe" data-fancybox="" data-src="/.ajax/call.p3">Отправить заявку</button>
</form>

В call.p3, грубо говоря (у меня просто не php):

if (isset($_POST)) {
    print("x1" . $_POST['x1']);
    print("x2: " . $_POST['x2']);
}

Выводятся только первые отправленные параметры. Через консоль браузера можно посмотреть

Это кеш? Особенность работы fancybox?


Ответы (1 шт):

Автор решения: zhurof

Интересный баг. Победить не удалось. Если вызывать модальное окно по другому - работает.

$(document).ready(function() {
  function calcParam() {
    var calc = $('.calc__form').serialize();
    $.ajax({
      type: 'POST',
      url: '/.ajax/calc/otlivy.p3',
      data: calc,
      success: function(msg) {
        $(".calc__amount").html(msg);
      },
      error: function() {}
    });
  }

  $('.calc__form').on('input', function() {
    calcParam();
  })
  
   $('.calc__form').submit(function(e){
    e.preventDefault();
    var data = $(this).serialize();     
    $.fancybox.open({src: '/.ajax/call.p3?'+data, type: 'iframe'});
   })
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<link href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>
<form method="post" class="calc__form">
  <input name="coef" value="1" type="hidden">
  <input name="xparam" value="2" type="hidden">
  <div class="calc__form--line">
    <div>
      <div class="calc__form--label">
        Длина X1:
      </div>
      <div class="calc__form--field"><input name="x1" type="text" value="20" class="onlydigits calc__form--input"><span class="mm">мм<span></span></span>
      </div>
    </div>
    <div>
      <div class="calc__form--label">
        Длина X2:
      </div>
      <div class="calc__form--field"><input name="x2" type="text" value="20" class="onlydigits calc__form--input"><span class="mm">мм<span></span></span>
      </div>
    </div>
  </div>
  <button class="btn anim calc__submit">Отправить заявку</button>
</form>

→ Ссылка