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初学者头痛的十四个问题
Jul 12 PHP
第九节--绑定
Nov 16 PHP
PHP数据缓存技术
Feb 14 PHP
php利用cookie实现访问次数统计代码
May 19 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
基于php实现的验证码小程序
Dec 13 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
利用ajax+php实现商品价格计算
Mar 31 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 25 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
jQuery实现轮播图源码
2019/10/23 jQuery
JS制作简易计算器的实例代码
2020/07/04 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python实现的二维码生成小软件
2014/07/11 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
利用python实现逐步回归
2020/02/24 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
解决pip install psycopg2出错问题
2020/07/09 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
init进程的作用
2015/08/20 面试题
护理专业优质毕业生自荐书
2014/01/31 职场文书
毕业生就业意向书
2014/04/01 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
敬老院活动感想
2015/08/07 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书