$script = <<< JS
$(document).on("beforeSubmit", "#product-form", function () {
//Сама форма
var form = $(this);
$.ajax({
//Тип запроса
type: form.attr('method'),
//Адрес запроса
url: form.attr('action'),
//Данные из формы в массиве
data: form.serializeArray(),
}
)
//Если запрос отправлен
.done(function(data) {
//Не прошла валидация с сервера
if (data.validation) {
form.yiiActiveForm('updateMessages', data.validation, true); // renders validation messages at appropriate places
} else {
//Рендр полученного шаблона в блок вместо формы(в моем случае список продуктов)
jQuery('.my_own_info').html(data);
window.history.replaceState('admin', null, '/admin/feed/my-products')
}
})
//Если запрос не ушел
.fail(function () {
alert('Ошибка, попробуйте позже');
})
return false; // Отменить синхронную отправку данных
});
JS;
$this->registerJs($script);
?>
//Если пришел Ajax запрос
if (Yii::$app->request->isAjax) {
//Если объект создан
if ($model->load(Yii::$app->request->post()) && $model->save()) {
//Вернуть нужныйй шаблон хтмл
$products = Product::find()->all();
return $this->renderAjax('my_products', compact($products));
}
$result = [];
//если валидация модели не прошла, собираем ошибки, и возвращаем
foreach ($model->getErrors() as $attribute => $errors) {
$result[Html::getInputId($model, $attribute)] = $errors;
}
return $this->asJson(['validation' => $result]);
}
Добрый день.
a)Запрос все время возвращается ерорсами
Какими именно?
$(document).on("beforeSubmit", "#product-form", function () {
var form = $(this).serialize();
jQuery.ajax({
type: 'POST',
url: "/admin/feed/save",
data: {forma: form},
dataType: "json",
success: function (data) {
alert(data);
},
error: function (data) {
alert("беда");
}
});
});
public function actionSave()
{
if (Yii::$app->request->isAjax) {
echo "Ok";
}
return 'Ok';
}
// Multiple file selection with both text and image preview
// Note for multiple file upload, the attribute name must be appended with
// `[]` for PHP to be able to read an array of files
echo $form->field($model, 'upload_files[]')->widget(FileInput::classname(), [
'options' => ['multiple' => true],
'pluginOptions' => ['previewFileType' => 'any']
]);
if ($model->save() ) {
$model_id = $model->id;
return $this->renderAjax('_registration_img',[
'model_id' => $model_id,
]);
}