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
967 个函式
Oct 09 PHP
一个简单的自动发送邮件系统(二)
Oct 09 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
laravel批量生成假数据的方法
Oct 09 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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面向对象自动加载机制原理与用法分析
2016/10/14 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
php json转换相关知识(小结)
2018/12/21 PHP
鼠标事件延时切换插件
2011/03/12 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
Python 中迭代器与生成器实例详解
2017/03/29 Python
对python中的logger模块全面讲解
2018/04/28 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
军训自我鉴定怎么写
2014/02/13 职场文书
出生公证书样本
2014/04/04 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
办护照工作证明
2014/10/01 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
实习单位推荐信
2015/03/27 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL