Yii使用ajax验证显示错误messagebox的解决方法


Posted in PHP onDecember 03, 2014

本文实例讲述了Yii使用ajax验证显示错误messagebox的解决方法。分享给大家供大家参考。具体方法如下:

yii 自带了ajax 表单验证 这个可能有些朋友不知道了,但我今天在使用yii 自带的ajax 表单验证 时碰到一些问题,下面我来整理例子与大家参考一下。

在Yii中,可以利用ajax执行一个action,但是这个action有时候会有弹出错误讯息的需求,这时候的处理方式如下

基本思想

利用exception,比如:

throw new CHttpException(403, 'You are not authorized to perform this action.');

如果这个异常是 CHttpException 或者 YII_DEBUG 为 true的时候,错误消息可以通过CErrorHandler::errorAction来显示。在yiic默认生成的代码中,就是通过在 config/main.php 中加入如下代码来实现的

'errorHandler' => array(

    'errorAction' => 'site/error',),

但是在Yii  1.1.9 以上,ajax请求抛出的exceptions是通过CApplication::displayException()来显示的。这使得我们无法定制消息的显示方式。

CGridView 删除请求抛出异常的话就是这个样子,(YII_DEBUG 为 true )

Yii 1.1.9 检查ajax请求的逻辑被移除了,所以现在即便是ajax的异常也是通过CErrorHandler::errorAction处理的。

这样ajax的消息就可以DIY了。

示例

通过如下代码

public function actionError(){

    if($error=Yii::app()->errorHandler->error)

    {

        if(Yii::app()->request->isAjaxRequest)

            echo $error['message'];

 else

            $this->render('error', $error);

    }

}

后来又发现一个站长分享了一段代码

model:

public function rules()

{

        // NOTE: you should only define rules for those attributes that

        // will receive user inputs.

        return array(

            array('content, author, email', 'required'),

            array('author, email, url', 'length', 'max'=>128),

            array('email','email'),

            array('url','url'),

        );

}

controller:
if(isset($_POST['ajax']) && $_POST['ajax']==='comment-form')

{

    echo CActiveForm::validate($model);

    Yii::app()->end();

}

view:
<?php $form=$this->beginWidget('CActiveForm',array(

    'id'=>'post-form',                      //这是表单id

    'enableAjaxValidation'=>true,      //这里一定写 true

)); ?>

    <?php echo CHtml::errorSummary($model); ?>
    <div class="row">

        <?php

 echo $form->labelEx($model,'title');

 ?>

        <?php echo $form->textField($model,'title',array('size'=>80,'maxlength'=>128));

 ?>

        <?php

 echo $form->error($model,'title');

 ?>

    </div>
    <div class="row">

        <?php

 echo $form->labelEx($model,'content');

 ?>

        <?php

 echo CHtml::activeTextArea($model,'content',array('rows'=>10, 'cols'=>70));

 ?>

        <p class="hint">You may use <a target="_blank" href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a>.</p>

        <?php

 echo $form->error($model,'content');

 ?>

    </div>

 

<?php

$this->endWidget();

?>

这样好像很好的解决了yii ajax显示问题。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP 7的一些引人注目的新特性简单介绍
Nov 08 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
php微信支付之公众号支付功能
May 30 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
Yii中CGridView关联表搜索排序方法实例详解
Dec 03 #PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 #PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 #PHP
Yii实现多按钮保存与提交的方法
Dec 03 #PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 #PHP
Yii框架登录流程分析
Dec 03 #PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 #PHP
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php图片缩放实现方法
2014/02/20 PHP
php获取根域名方法汇总
2014/10/28 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
微信API接口大全
2015/04/15 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
任意位置显示html菜单
2007/02/01 Javascript
JS分页效果示例
2013/10/11 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
房地产营销策划方案
2014/02/08 职场文书
售后求职信范文
2014/03/15 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
委托公证书范本
2014/04/03 职场文书
初中作文评语大全
2014/04/23 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
接收函
2019/04/22 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
MySQL Server 层四个日志
2022/03/31 MySQL