Ajax submit ActiveForm
Ajax submit ActiveForm
Не получается разобраться, как сделать ajax submit ActiveForm, с enableClientValidation = true (и всеми остальными дефолтными параметрами).
Укажите плз направление или дайте пример кода (:
Укажите плз направление или дайте пример кода (:
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
Можно было бы сделать по простому, через beforeSubmit, если бы функция вызывалась не тут.
Т.е. ИМХО - сейчас вызов функции не в том месте. Нужно, перенести вот сюда:
потому что по факту, submit формы происходит именно там, только когда форма валидна.
Такая перестановка позволит написать подобное:
Т.е. ИМХО - сейчас вызов функции не в том месте. Нужно, перенести вот сюда:
Код: Выделить всё
if (data.validated) {
if (data.settings.beforeSubmit != undefined) {
return data.settings.beforeSubmit($form);
}
// continue submitting the form since validation passes
return true;
}
Такая перестановка позволит написать подобное:
Код: Выделить всё
<?php $form = ActiveForm::begin([
'beforeSubmit' => new \yii\web\JsExpression('function(form) {
jQuery.ajax({
url: "'. $this->context->createUrl('create') .'",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function(response) {
...
},
error: function(response) {
...
}
});
return false;
}')
]);
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
Хотя это не решает в полной мере первоначального вопроса.
Код: Выделить всё
if (data.validated) {
data.validated = false; // Нужны еще 2 строки, для сохранения clientSide валидации
data.submitting = false;
if (data.settings.beforeSubmit != undefined) {
return data.settings.beforeSubmit($form);
}
// continue submitting the form since validation passes
return true;
}
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
можете показать текущий рабочий код для аякс сабмита формы?
Re: Ajax submit ActiveForm
Код: Выделить всё
<?php $form = ActiveForm::begin([
'beforeSubmit' => new \yii\web\JsExpression('
function(form) {
jQuery.ajax({
url: "'. $this->context->createUrl('create') .'",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
return false;
}')
]);
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
спасибо, пригодится.
Re: Ajax submit ActiveForm
Код: Выделить всё
'beforeSubmit' => new \yii\web\JsExpression('
function(form) {
jQuery.ajax({
url: "'. Yii::$app->UrlManager->createUrl('post/create') .'",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function(response) {
alert(response.post-id_user);
console.log(response);
},
error: function(response) {
//console.log(response);
}
});
return false;
}')
выдает ошибку Uncaught ReferenceError: id_user is not defined
хотя ответ приходит такой в response
Код: Выделить всё
{"post-id_user":["User cannot be blank."],"post-title":["\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a cannot be blank."],"post-text":["\u0422\u0435\u043a\u0441\u0442 cannot be blank."],"post-category":["\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f cannot be blank."]}
Re: Ajax submit ActiveForm
response['post-id_user']
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
К слову, beforeSubmit не сработает в случае отсутствия клиентской валидации.
Тикет создал, а пока можно либо грубо хакнуть ActiveForm, либо в скрипте отлавливать присутствие объекта yii.activeForm и в случае отсутствия такового - перевешиваться на .on('submit').
Тикет создал, а пока можно либо грубо хакнуть ActiveForm, либо в скрипте отлавливать присутствие объекта yii.activeForm и в случае отсутствия такового - перевешиваться на .on('submit').
Re: Ajax submit ActiveForm
Вообще я "за" custom event. Ещё бы PR кто ни будь запили на всё это дело
ps: есть ещё вот такой issue
ps2: нет ни какой сложности перехватить submit если clientValidation = false. Для меня, вполне нормальное поведение когда мы изменяем одно, другое тоже нужно изменить. Имхо это просто не самый удачный пример. А вообще ещё раз повторюсь я всецело "за" custom event. Вообще не люблю мешанину из php и js.
ps: есть ещё вот такой issue
ps2: нет ни какой сложности перехватить submit если clientValidation = false. Для меня, вполне нормальное поведение когда мы изменяем одно, другое тоже нужно изменить. Имхо это просто не самый удачный пример. А вообще ещё раз повторюсь я всецело "за" custom event. Вообще не люблю мешанину из php и js.
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Re: Ajax submit ActiveForm
На самом деле это жесть.6pblcb писал(а):ps2: нет ни какой сложности перехватить submit если clientValidation = false. Для меня, вполне нормальное поведение когда мы изменяем одно, другое тоже нужно изменить
Дело тут вот в чем: если клиентская валидация присутствует (хотя бы одно поле требует валидации) - то к onsubmit прицепиться просто так не получится: на этом событии валидация висит. Ок, цепляемся к beforeSubmit и благополучно забываем про это.
Через некоторое время кто-нибудь слегка меняет правила валидации модели таким образом, что на клиенте ничего больше не валидируется.
Засада в том, что в этом случае скрипты activeform ВООБЩЕ не будут созданы, соответственно событие beforeSubmit некому будет озвучить.
Вот таким нехитрым способом, поменяв серверную валидацию модели, мы ломаем клиентский интерфейс.
Варианты обхода:
- вешаться на onsubmit, но предварительно проверять наличие activeForm и ее свойства validated.
- проверять наличие activeForm и вешаться либо на onsubmit, либо на beforeSubmit, в зависимости.
- побузить в гитхабе и выпросить возможность рендерить скрипты activeform при наличии обработчиков событий. Мой тикет подвис в under discussion, я как-то не очень понимаю, что это значит.
Что касается мешанины из php и js - я ее тоже не люблю, но в случае с обработчиками - достаточно написать что-то вроде 'beforeSubmit' => 'myHandler', и нет никакой мешанины. Function myHandler() соответственно определить уже в обычном блоке script.
Re: Ajax submit ActiveForm
А нельзя все-таки нативно это все сделать? Зачем еще js код дописывать? Почему fw сам не может скрипт правильно настроить?
-
- Сообщения: 4
- Зарегистрирован: 2013.06.25, 15:52
Re: Ajax submit ActiveForm
Внимание случайно набредших на это обсуждение в пост-релизные времена Yii2 хочу обратить на ссылку о неактульности данного приёма в таком виде:
http://www.yiiframework.ru/forum/viewtopic.php?t=19932
Следует вешать событие на форму через jQuery самостоятельно (описано в анонсе RC-версии).
http://www.yiiframework.ru/forum/viewtopic.php?t=19932
Следует вешать событие на форму через jQuery самостоятельно (описано в анонсе RC-версии).