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 相关文章推荐
xml在joomla表单中的应用详解分享
Jul 19 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
php中动态变量用法实例
Jun 10 PHP
PHP里的单例类写法实例
Jun 25 PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
php7中停止php-fpm服务的方法详解
May 09 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中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
python推导式的使用方法实例
2021/02/28 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
五一手机促销方案
2014/03/08 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
法制教育观后感
2015/06/17 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
采购部年度工作总结
2015/08/13 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers