serg_small_developer
@serg_small_developer
Начинающий прогер

Почему за одну отправку формы срабатывает несколько ajax запросов?

Всем привет, у меня есть модалка в которую я подгружаю данные через ajax вот так
$this->registerJs("
	$('#add_report').on('click', function() {
		$('#blockForLoadfunction').empty();
		$('#blockForLoadfunction').load('" . Url::to(['/project-group-report/load']) . "');
	});
");

модалка имеет вот такой код
Modal::begin([
    'options' => [
        'id' => 'kartik-modal',
        'tabindex' => false
    ]
]);
	Pjax::begin([
		'id'=> 'reportModelShow', 
		'enablePushState'=> false, 
		'timeout'=>5000
	]); 
		<?php $form = ActiveForm::begin([
			'action' =>['/project-group-report/load'],
			'id' => 'reportModelShowForm',
			'options' => [
				'enctype' => 'multipart/form-data',
				'data-pjax' => true,
			]
		]); ?>
			//разные поля формы
		<?php ActiveForm::end(); ?>
	Pjax::end();
Modal::end();

$this->registerJs("
	$('#kartik-modal').modal('show');
	$('.btn-outline, .close').on('click', function() {
		$('#kartik-modal').modal('hide');
	});
");

работает почти все как нужно.
Перезагружаю страницу, нажимаю на кнопку, выскакивает модалка, заполняю данные и нажимаю сохранить все работает как нужно, дебаг показывает 1 ajax сработал. Но если я закрою модалку НЕ ПЕРЕЗАГРУЖУ СТРАНИЦУ, а просто закрою и потом опять открою, оформлю форму и нажму отправить то все опять сработает но уже вместо 1 ajax сработает 2 за одну отправку, если я так и дальше продолжу просто закрывать открывать модалку без перезагрузки и отправлять форму то количество ajax запросов за одну отправку будет столько же сколько я закрывал\открывал модалку.

вот пример одного срабатывания после нескольких раз закрытия\открытия модального окна
cb95d9c30843.jpg
Если перезагружать страничку после каждой отправки формы то нормально работает.
Из-за этого соответственно в базе есть дубли так как за одну отправку формы срабатывает несколько.
Еще нужно сказать что если например за один раз сработало три запроса то один из них будет нормальный, а все остальные будут точно с такими же параметрами только с одним отличием в их заголовках будет вот такая запись - "Client closed connection before receiving entire response".

Прошу помочь у кого была подобная проблема, уже несколько дней пытаюсь решить, но никак.
  • Вопрос задан
  • 368 просмотров
Пригласить эксперта
Ответы на вопрос 3
customtema
@customtema
arint.ru
event.preventDefault();
 event.stopPropagation();
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
количество ajax запросов за одну отправку будет столько же сколько я закрывал\открывал модалку

Обычно, такое поведение означает, что при каждом нажатии на кнопку вы заново добавляете обработчик нажатия. Учитывайте, что on() не заменяет обработчик, а именно добавляет, а при нажатии на кнопку вызовутся все назначенные обработчики.
Ответ написан
Дело в том что инициализируя PJAX на форму вешается обработчик отправки формы, вешается он делегировано тоесть через $(document).on(...), поэтому при каждой загрузке снова и снова навешиваются обработчики, посмотреть код можно в панели разработчика, в ответе сервера как правило в самом конце есть блок
Ответ написан
Ваш ответ на вопрос

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

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