好的,我需要帮助的东西似乎非常简单,但我无法弄明白。
我在Yii中有一个页面,我正在尝试嵌入一个AJAX表单。让我们调用页面A.表单采用单个值,如果没有问题,需要验证并将其存储到数据库中。
到目前为止,这是我已经想到的:
表单位于_form.php视图中,其中包含一个CActiveForm和一个ajaxSubmitButton,如下所示:
<?php echo CHtml::ajaxSubmitButton('submit', $this->createUrl('/site/something'), array('update'=>'#targetdiv'));?>
在另一个A的视图中调用该表单,如下所示:
<?php echo $this->renderPartial('/site/_form', array('AModel'=>$model)); //Passing some info about A ?>
在控制器的actionSomething中,我正在执行以下操作:
if (Yii::app()->request->isAjaxRequest) {
$model = new AJAXForm('submit');
if (isset($_POST['AJAXForm'])) {
$model->attributes = $_POST['AJAXForm'];
if ($model->validate()) {
//When data's valid, save to DB is working fine. This part is working perfectly.
}
else {
//This is the part I'm confused about and that's not working
/*Trying to render the form to get the error messages and summary displayed
but nothing's showing */
$this->renderPartial('/site/_form', array('AModel'=>$model));
Yii::app()->end();
}
}
}
在Firebug中,我确实看到当遇到错误时,响应再次包含整个部分渲染表单。但是,targetdiv没有使用更新的表单更新错误消息。
我有一种感觉我在actionController中做错了什么,但我无法弄清楚是什么。如果我能够看到AJAX提交表单的完整示例,将会很有帮助。
谢谢!
答案 0 :(得分:1)
$model->getErrors()
会为您提供所有属性的所有错误
http://www.yiiframework.com/doc/api/1.1/CModel#getErrors-detail
if ($model->validate()) {
//When data's valid, save to DB is working fine. This part is working perfectly.
}
else {
$errors = $model->getErrors();
echo $errors;
Yii::app()->end();
}
然后将此传递到ajaxSubmitButton()
ajax选项,根据Yii论坛上的这篇文章:http://www.yiichina.net/forum/index.php/topic/23236-extension-how-to-display-validation-errors-comming-from-ajax-validation/
'success'=>"function(html) {
if (html.indexOf('{')==0) {
var e = jQuery.parseJSON(html);
jQuery.each(e, function(key, value) {
jQuery('#'+key+'_em_').show().html(value.toString());
jQuery('#'+key).addClass('clsError');
jQuery('label[for='+key+']').addClass('clsError');
});
}
答案 1 :(得分:0)
尝试将'dataType'添加到ajaxSubmitButton属性中,例如:
array('type' =>'POST',
'update' => '#targetdiv',
'dataType' => 'html',
),
你可能想尝试传回一些基本文本来先测试它 - 如果你只是想显示一条错误信息,你可能不需要重新渲染表格。