【发布时间】:2013-11-11 15:47:23
【问题描述】:
我创建了一个带有 CActiveForm 的小部件。一切正常,但现在我想为其启用 ajax 验证。
问题是我的 ajax 验证的输出除了包含验证 JSON 字符串之外,还包含我的 html 的所有(以及其中的一部分,因为Yii::app()->end() 停止了其余部分)。并不奇怪,因为我在一个小部件中使用它,并且验证请求是对我放置这个小部件的控制器/动作完成的。
有没有办法防止输出所有的html,所以返回一个有效的JSON字符串?
我已经尝试将 CActiveForm 中的 validationUrl 设置为另一个控制器/操作,但问题是我必须将模型与它一起发送,并且此模型是在我的小部件中确定的,而不是在 validationUrl 中确定的。
小部件:
public function run()
{
$model = new User;
$model->scenario = 'create';
$this->performAjaxValidation($model);
if (isset($_POST['User'])) {
$model->attributes = $_POST['User'];
if ($model->save()) {
}
}
$this->render('register-form', array(
'model' => $model
));
}
/**
* Performs the AJAX validation.
* @param User $model the model to be validated
*/
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']))
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
performAjaxValidation() 的输出(ajax 调用):
.. more html here ..
<section class="box">
<h1>Register form simple</h1>
{"UserPartialSignup_email":["Email is geen geldig emailadres."]}
【问题讨论】:
标签: ajax validation yii widget