在 Yii 中启用客户端验证和提交表单后添加了双记录
Double Records Added After Enabling Client Side Validation And Submitting form in Yii
我在 Yii 中有一个由 AJAX 提交的简单表格:
<?php $form = $this->beginWidget('CActiveForm', array(
'id' => 'application-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'htmlOptions' => array(
'enctype' => 'multipart/form-data',
'onsubmit'=>"return send();"
),
'clientOptions'=>array('validateOnSubmit'=>true)
)); ?>
<div class="row">
<?php echo $form->labelEx($model, 'name'); ?>
<?php echo $form->textField($model, 'name', array('size' => 60,'maxlength' => 255)); ?>
<?php echo $form->error($model, 'name'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
以及提交功能:
function send (){
var data_form=$("#application-form").serialize();
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl('admin/application/create') ?>",
dataType:'json',
data: data_form,
success: function (data, textStatus, jqXHR) {
console.log(data);
alert("success",textStatus);
},
error: function (jqXHR, textStatus, errorThrown) {
// console.log( errorThrown);
}
});
return false;
}
我的创建控制器:
public function actionCreate()
{
$model = new Application;
$model->setScenario('create');
$this->performAjaxValidation($model);
if (isset($_POST['Application'])) {
if ( $model->save()){
echo CJSON::encode(array('success' => 'true','id'=>$model->id));
Yii::app()->end();
}
}
$this->render('create', array(
'model' => $model
));
}
需要文件名,这只是目前的验证。当我尝试在没有输入字段名称的情况下提交表单时,验证消息会按照他们在 Yii 中应该做的那样出现。但是当我正确填写表格时,我的模型在数据库中输入了两次。如果我删除以下 属性:
'clientOptions'=>array('validateOnSubmit'=>true)
模型已正确保存(仅一次),但未出现验证消息。
当我通过 ajax 提交表单并且模型不被保存两次时,如何让 Yii 中显示默认验证消息。我需要以这种方式提交表单,因为我将 return model id in Ajax response for processing in JavaScript.
我在网上搜索了这个并尝试了所有建议,但 none 的建议有效。
谢谢大家!
我通过添加 'afterValidate'=>'js:function(form,data,hasError){ send(form,data,hasError);
和删除 'onsubmit'=>"return send();"
行来解决。现在它显示验证错误并且只保存模型一次。
查看 this post 了解更多信息。
我在 Yii 中有一个由 AJAX 提交的简单表格:
<?php $form = $this->beginWidget('CActiveForm', array(
'id' => 'application-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'htmlOptions' => array(
'enctype' => 'multipart/form-data',
'onsubmit'=>"return send();"
),
'clientOptions'=>array('validateOnSubmit'=>true)
)); ?>
<div class="row">
<?php echo $form->labelEx($model, 'name'); ?>
<?php echo $form->textField($model, 'name', array('size' => 60,'maxlength' => 255)); ?>
<?php echo $form->error($model, 'name'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
以及提交功能:
function send (){
var data_form=$("#application-form").serialize();
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl('admin/application/create') ?>",
dataType:'json',
data: data_form,
success: function (data, textStatus, jqXHR) {
console.log(data);
alert("success",textStatus);
},
error: function (jqXHR, textStatus, errorThrown) {
// console.log( errorThrown);
}
});
return false;
}
我的创建控制器:
public function actionCreate()
{
$model = new Application;
$model->setScenario('create');
$this->performAjaxValidation($model);
if (isset($_POST['Application'])) {
if ( $model->save()){
echo CJSON::encode(array('success' => 'true','id'=>$model->id));
Yii::app()->end();
}
}
$this->render('create', array(
'model' => $model
));
}
需要文件名,这只是目前的验证。当我尝试在没有输入字段名称的情况下提交表单时,验证消息会按照他们在 Yii 中应该做的那样出现。但是当我正确填写表格时,我的模型在数据库中输入了两次。如果我删除以下 属性:
'clientOptions'=>array('validateOnSubmit'=>true)
模型已正确保存(仅一次),但未出现验证消息。
当我通过 ajax 提交表单并且模型不被保存两次时,如何让 Yii 中显示默认验证消息。我需要以这种方式提交表单,因为我将 return model id in Ajax response for processing in JavaScript.
我在网上搜索了这个并尝试了所有建议,但 none 的建议有效。
谢谢大家!
我通过添加 'afterValidate'=>'js:function(form,data,hasError){ send(form,data,hasError);
和删除 'onsubmit'=>"return send();"
行来解决。现在它显示验证错误并且只保存模型一次。
查看 this post 了解更多信息。