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 相关文章推荐
如何对PHP程序中的常见漏洞进行攻击
Oct 09 PHP
PHP实现Socket服务器的代码
Apr 03 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
CI框架整合smarty步骤详解
May 19 PHP
php插入mysql数据返回id的方法
May 31 PHP
laravel中的一些简单实用功能
Nov 03 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
php自动加载autoload机制示例分享
2014/02/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python装饰器用法示例小结
2018/02/11 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
个人找工作求职简历的自我评价
2013/10/20 职场文书
保护动物倡议书
2014/04/15 职场文书
电教室标语
2014/06/20 职场文书
个人德育工作总结
2015/03/05 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
羊脂球读书笔记
2015/06/30 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python