关于CActiveForm
文档中的内容是:(clientOptions部分)
ajaxVar:字符串,表示请求的参数名称是AJAX请求。当触发 AJAX 验证时,名为该属性的参数将与其他表单数据一起发送到服务器。参数值是表单 ID。然后,服务器端可以检测谁触发了 AJAX 验证并做出相应的反应。默认为“ajax”。
现在看一下我的示例: 摘要:我有一个包含两个字段的表单,mail
并且newEmail
我通过提交表单ajaxSubmitButton
(如果您需要表单代码,请告诉我输入)。在以下我得到var_dump($_POST)
两种状态的内容:
首先:以下 var_dump($_POST) 用于字段(newEmail)为空时:
array
'User' =>
array
'email' => string 'user@gmail.com' (length=14)
'newEmail' => string '' (length=0)
第二:以下 var_dump($_POST) 用于填充所有字段时:
array
'User' =>
array
'email' => string 'user@gmail.com' (length=14)
'newEmail' => string 'admin@gmail.net' (length=19)
'ajax' => string 'email-form' (length=10)
'yt0' => string 'update' (length=18)
如您所见,只有在填写所有字段时,ajaxVar(ajax)
存在于$_POST
. 在ajaxVar(ajax)
CActiveForm 中初始化时?
编辑
电子邮件形式:
<?php
<div class="form">
<?php $form = $this->beginWidget('CActiveForm',array(
'id'=>'email-form',
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'focus'=>'input[type="email"]:first',
)
)); ?>
<div class="row">
<?php echo $form->label($model,'email') ?>
<?php echo $form->textField($model,'email') ?>
<?php echo $form->error($model,'email') ?>
</div>
<div class="row">
<?php echo $form->label($model,'newEmail') ?>
<?php echo $form->textField($model,'newEmail') ?>
<?php echo $form->error($model,'newEmail') ?>
</div>
<hr>
<div class="row">
<?php echo CHtml::ajaxSubmitButton(
'update',
Yii::app()->createUrl('upanel/user/CEmail'),
array(
'dataType'=>'json',
'type' => 'POST',
'data' => "js:$('#email-form').serialize()",
'success'=>'function(data){
if(data.status=="success")
{
//alert(data.status);
hideFormErrors(form="#email-form");
callback(status=data.status);
}else{
formErrors(data,form="#email-form");
}
}',
'beforeSend'=>'before',
),
array(
'id' => 'update-button'.uniqid(),
'class'=>'submit-button'
)
);
?>
</div>
<?php $this->endWidget() ?>
</div>
<?php echo $form->errorSummary($model,'please solve following errors:') ?>
行动电子邮件:
public function actionCEmail()
{
/*ob_start();
var_dump($_POST);
$log=ob_get_contents();
$fp = fopen('data.html', 'w');
fwrite($fp, $log);
fclose($fp);
Yii::app()->end();*/ //This block active whenever i want see the $_POST content
$model = $this->loadModel(Yii::app()->user->id);
$model->scenario = 'CEmail';
$this->performAjaxValidation($model,'email-form');
if(Yii::app()->request->isAjaxRequest)
$this->renderPartial('_cemail',array('model'=>$model),false,true);
else
$this->render('update',array('model'=>$model,'form'=>'_cemail'));
}
protected function performAjaxValidation($model,$form)
{
if(isset($_POST['ajax']) && $_POST['ajax']===$form)
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}