kay*_*der 2 php ajax refresh modal-dialog yii2
我有一个创建购买页面。它有一个供应商下拉字段,我可以在其中添加新供应商,单击时会显示一个模式。模式中有一个用于添加新供应商的表格。当我创建新的供应商并单击提交按钮后,页面将刷新。
这是一个屏幕截图:

由于我的动作控制器中的功能,页面被刷新redirect:
$model->refresh();
return $this->redirect(['index', 'id' => $session['user_id']]);
Run Code Online (Sandbox Code Playgroud)
我知道 Ajax 也许可以解决这个问题,但我不知道如何开始。单击“创建”按钮后,如何从模式表单中获取数据以在 Ajax 函数中使用它,而无需通过控制器(仅用于前端显示)?
小智 5
通过在 ActiveForm 选项中添加以下行来禁用 Yii 客户端验证
'enableClientValidation'=>false
Run Code Online (Sandbox Code Playgroud)
现在,在表单提交中添加您的 javascript 代码,以收集表单数据并将其发送到服务器。Yii 将验证此数据,如果有任何验证错误,我们会将其发回
$this->registerJs('
$("#contact-form").submit(function() {
$(".form-group").removeClass("has-error"); //remove error class
$(".help-block").html(""); //remove existing error messages
var form_data = $("#contact-form").serialize();
var action_url = $("#contact-form").attr("action");
$.ajax({
method: "POST",
url: action_url,
data: form_data
})
.done(function( data ) {
console.log(data);
if(data.success == true) { //data saved successfully
} else { //validation errors occurred
$.each(data.error, function(ind, vl) { //show errors to user
$(".field-contactform-"+ind).addClass("has-error");
$(".field-contactform-"+ind).find(".help-block").html(vl[0]);
});
}
});
return false;
});', \yii\web\View::POS_READY, 'my-ajax-form-submit');
Run Code Online (Sandbox Code Playgroud)
现在对您的控制器操作进行了一些更改
public function actionContact()
{
$model = new ContactForm();
if ($model->load(Yii::$app->request->post())) {
$success = false;
$error = [];
if($model->contact(Yii::$app->params['adminEmail'])) {
$success = true;
} else {
$error = $model->getErrors(); //get validation error messages
}
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
echo json_encode(['success' => $success, 'error' => $error ]);
Yii::$app->end();
} else {
return $this->render('contact', [
'model' => $model,
]);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都完成了。
| 归档时间: |
|
| 查看次数: |
11212 次 |
| 最近记录: |