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 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
php写的AES加密解密类分享
Jun 20 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
PHP常用的排序和查找算法
Aug 06 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
解决php-fpm.service not found问题的办法
Jun 06 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
php中关于换行的实例写法
Sep 26 PHP
laravel框架创建授权策略实例分析
Nov 22 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
PHP5 字符串处理函数大全
2010/03/23 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
python抓取网页中的图片示例
2014/02/28 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
python迭代dict的key和value的方法
2018/07/06 Python
django-allauth入门学习和使用详解
2019/07/03 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
师德师风自我评价范文
2014/09/11 职场文书
小学班主任事迹材料
2014/12/17 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
教师节座谈会主持词
2015/07/03 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
Python实现智慧校园自动评教全新版
2021/06/18 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers