Yii2: определить отправку формы Pjax по сравнению с отправкой вручную

У меня есть представление для создания элемента. В представлении у меня есть ActiveForm внутри Pjax, эта форма представляет собой вход для загрузки изображения, который после изменения я использую javascript для отправки формы:

$('#itemForm').submit();

Цель состоит в том, что я хочу загрузить изображения во временную папку и отобразить их на странице, чтобы их можно было отсортировать до сохранения элемента.

Проблема, с которой я сталкиваюсь, заключается в том, чтобы различать отправку javascript и отправку пользователем формы с помощью кнопки отправки.

Я попытался добавить имя к кнопке отправки:

Html::submitButton('Save Item', ['class' => 'btn btn-success', 'name' => 'submitButton'])

Но независимо от того, отправляю ли я через javascript или через кнопку, $_POST содержит submitButton, поэтому я не могу сказать, когда изображения загружаются и когда элемент сохраняется.


person sharf    schedule 14.03.2018    source источник
comment
Использовать скрытое поле, заполняемое при нажатии на кнопку отправки   -  person Fabrizio Caldarelli    schedule 14.03.2018
comment
почему бы не опубликовать дополнительную переменную с вызовом javasacript, например is_js, и проверить ее.   -  person Muhammad Omer Aslam    schedule 14.03.2018
comment
@MuhammadOmerAslam Это была моя первая мысль. Я не уверен, как это сделать, не нарушая pjax Yii2. Если бы это был ванильный php, у меня не было бы проблем.   -  person sharf    schedule 14.03.2018
comment
как сказал FabrizioCaldarelli, я бы сказал, что вы должны добавить скрытое поле, которое должно быть отправлено вместе с формой, и когда вам нужно отправить форму через js, сначала заполните это скрытое поле некоторым значением, скажем, 1, а затем вызовите .submit() и далее сторона php проверяет значение, если его 1, то его js отправляет, в противном случае нормально. как насчет этого ?   -  person Muhammad Omer Aslam    schedule 14.03.2018


Ответы (1)


Что ж, если вы хотите обнаружить отправку через javascript, вы должны объявить скрытое поле со значением по умолчанию 0.

Html::hiddenInput('is_js_submit',0,['id'=>'is_js_submit']);

Затем, прежде чем вы позвоните

$('#itemForm').submit();

чтобы отправить форму при загрузке изображения, добавьте заявление

$("#is_js_submit").val(1)

и теперь вы можете проверить значение внутри вашего controller/action, если это отправка javascript или отправка обычной формы.

Надеюсь, это поможет вам.

person Muhammad Omer Aslam    schedule 14.03.2018