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数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php内存缓存实现方法
Jan 24 PHP
php限制文件下载速度的代码
Oct 20 PHP
Zend Framework分页类用法详解
Mar 22 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
PHP基于array_unique实现二维数组去重
Jul 14 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
详解vue路由
2020/08/05 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
Python 忽略warning的输出方法
2018/10/18 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
Python3获取cookie常用三种方案
2020/10/05 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
构造器Constructor是否可被override?
2013/08/06 面试题
金融专业个人求职信
2013/09/22 职场文书
外企财务年会演讲稿
2014/01/03 职场文书
全神贯注教学反思
2014/02/03 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python
Python matplotlib绘制雷达图
2022/04/13 Python