her*_*ron 12 javascript php ajax yii2 active-form
目前同时实现ajax提交和验证.我正在使用自定义功能:
$('.edit_form').submit(function (e) {
e.preventDefault();
var form = $(this);
var formData = $(this).serialize();
if (form.find('.has-error').length) {
return false;
}
$.ajax({
url: form.attr("action"),
type: form.attr("method"),
data: formData,
success: function (data) {
...
},
error: function () {
alert("Something went wrong");
}
});
});
Run Code Online (Sandbox Code Playgroud)
这里是php端,为了验证我的配置看起来像这样:
$form = ActiveForm::begin([
'id' => "some_form",
'action' => ['user/edit'],
'options' => ['class' => 'edit_form'],
'enableAjaxValidation' => false,
'enableClientValidation' => true,
]); ?>
Run Code Online (Sandbox Code Playgroud)
我敢肯定,这不是达到我需要的最佳方式.特别是我用于在验证错误的情况下阻止提交的这部分:
if (form.find('.has-error').length) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?如何使用Yii 2的内置设置正确实现ajax提交和验证?
Nad*_*der 16
使用beforeSubmit事件而不是submit, 只有在表单通过验证后才会触发beforeSubmit.
$('form').on('beforeSubmit', function(e) {
var form = $(this);
var formData = form.serialize();
$.ajax({
url: form.attr("action"),
type: form.attr("method"),
data: formData,
success: function (data) {
...
},
error: function () {
alert("Something went wrong");
}
});
}).on('submit', function(e){
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
Dha*_*ara 10
你可以使用AjaxSubmitButton.
你的表格应该是b
$form = ActiveForm::begin([
'id' => "some_form",
'action' => 'javascript:void(0)',
'options' => ['class' => 'edit_form'],
]);
Run Code Online (Sandbox Code Playgroud)
在这里使用AjaxSubmitButton
AjaxSubmitButton::begin([
'label' => 'Submit',
'id' => 'some_form',
'ajaxOptions' => [
'type' => 'POST',
'url' => \yii\helpers\Url::to(['/user/edit']),
'success' => new \yii\web\JsExpression(
'function(data){
if(data=="success")
{
}else{
$.each(data, function(key, val) {
$("#"+key).after("<div class=\"help-block\">"+val+"</div>");
$("#"+key).closest(".form-group").addClass("has-error");
});
}
}'
),
],
'options' => ['class' => 'btn btn-success', 'type' => 'submit'],
]);
AjaxSubmitButton::end();
Run Code Online (Sandbox Code Playgroud)
在你的控制器中
public function actionEdit()
{
$model = new User;
if($model->save())
{
$result = 'success';
Yii::$app->response->format = trim(Response::FORMAT_JSON);
return $result;
}else{
$error = \yii\widgets\ActiveForm::validate($model);
Yii::$app->response->format = trim(Response::FORMAT_JSON);
return $error;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21934 次 |
| 最近记录: |