当enableClientValidation设置为true时,yii2-pjax小部件不会触发ajax。仅当enableClientValidation设置为false时,pjax才能在此处运行。有没有办法在每个字段(通过yii)以及提交按钮上的pjax(通过pjax)上具有活动表单客户端和ajax验证
<?php Pjax::begin(['id'=> 'new-comment','enablePushState' => false]); ?>
<?php $form = ActiveForm::begin([
'id' => $model->formName(),
'options' => ['data-pjax' => "1"] ,
'action' => ['site/signup'],
'enableClientValidation' => true,
]);
?>
<?= Html::submitButton('REGISTER', ['class' => 'btn btn-primary', 'name' => 'signup-button', 'id'=>'register-btn']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?
答案 0 :(得分:2)
我不得不在PHP中删除活动表单中的Pjax调用,否则clientValidation会失败。
<?php $form = ActiveForm::begin([
"id"=>"CreateForm",
'enableClientValidation' => true,
//'enableAjaxValidation' => true,
'validationUrl'=>['site/form-validate'],
"options" => ["enctype" =>"multipart/form-data"]
]
); ?>
enableAjaxValidation可以在上面
中生效目前我没有Pjax就将clientValidation设置为true,而Pjax是基于validationUrl进行验证的。表单的提交按钮在javascript中外部处理,首先调用相同的validationUrl并使用yii activeform的updateMessages方法更新错误字段。如果没有错误,则业务逻辑以与validationUrl action
不同的操作完成$.ajax({
url : encodeURI(baseUri + "site/form-validate"),
data : $("#CreateForm").serialize(),
dataType : 'json',
type : 'POST',
beforeSend : function(xhr, settings) {
$this.attr("disabled","disabled");
Pace.stop();
Pace.bar.render();
},
success : function(data) {
$('#CreateForm').yiiActiveForm("updateMessages", data);
if($("form#CreateForm").find('.has-error').length == 0) {
$.ajax({
url : encodeURI(baseUri + "site/form"),
data : $("#CreateForm").serialize(),
dataType : 'json',
type : 'POST',
beforeSend : function(xhr, settings) {
},
success : function(data) {
console.log(data);
},
error : function(data) {
},
complete : function() {
$this.removeAttr("disabled");
Pace.stop();
},
});
} else {
$this.removeAttr("disabled");
Pace.stop();
}
},
error : function(data) {
},
complete : function() {
},
});
控制器 -
public function actionFormValidate() {
$model = new CreateForm();
if(Yii::$app->request->isAjax && $model->load($_POST))
{
Yii::$app->response->format = 'json';
return \yii\widgets\ActiveForm::validate($model);
}
}