thinkphp中AJAX返回ajaxReturn()方法分析


Posted in PHP onDecember 06, 2016

本文分析了thinkphp中AJAX返回ajaxReturn()方法。分享给大家供大家参考,具体如下:

系统支持任何的AJAX类库,Action类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端。并且支持JSON、XML和EVAL三种方式给客户端接受数据,通过配置DEFAULT_AJAX_RETURN进行设置,默认配置采用JSON格式返回数据,在选择不同的AJAX类库的时候可以使用不同的方式返回数据。

要使用ThinkPHP的ajaxReturn方法返回数据的话,需要遵守一定的返回数据的格式规范。ThinkPHP返回的数据格式包括:

status 操作状态
info 提示信息
data 返回数据

$this->ajaxReturn(返回数据,提示信息,操作状态);

返回数据data可以支持字符串、数字和数组、对象,返回客户端的时候根据不同的返回格式进行编码后传输。如果是JSON格式,会自动编码成JSON字符串,如果是XML方式,会自动编码成XML字符串,如果是EVAL方式的话,只会输出字符串data数据,并且忽略status和info信息。

下面是一个简单的例子:

$User=M("User");//实例化User对象
$result = $User->add($data);
if ($result){
  //成功后返回客户端新增的用户ID,并返回提示信息和操作状态
  $this->ajaxReturn($result,"新增成功!",1);
}else{
  //错误后返回错误的操作状态和提示信息
  $this->ajaxReturn(0,"新增错误!",0);
}
$data['status'] = 1;
$data['info'] = 'info';
$data['size'] = 9;
$data['url'] = $url;
$this->ajaxReturn($data,'JSON');

thinkphp源代码:

/**
* Ajax方式返回数据到客户端
* @access protected
* @param mixed $data 要返回的数据
* @param String $type AJAX返回数据格式
* @return void
*/
protected function ajaxReturn($data,$type='') {
    if(func_num_args()>2) {// 兼容3.0之前用法
      $args      =  func_get_args();
      array_shift($args);
      $info      =  array();
      $info['data']  =  $data;
      $info['info']  =  array_shift($args);
      $info['status'] =  array_shift($args);
      $data      =  $info;
      $type      =  $args?array_shift($args):'';
    }
    if(empty($type)) $type =  C('DEFAULT_AJAX_RETURN');
    if(strtoupper($type)=='JSON') {
      // 返回JSON数据格式到客户端 包含状态信息
      header('Content-Type:text/html; charset=utf-8');
      exit(json_encode($data));
    }elseif(strtoupper($type)=='XML'){
      // 返回xml格式数据
      header('Content-Type:text/xml; charset=utf-8');
      exit(xml_encode($data));
    }elseif(strtoupper($type)=='EVAL'){
      // 返回可执行的js脚本
      header('Content-Type:text/html; charset=utf-8');
      exit($data);
    }else{
      // TODO 增加其它格式
    }
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中在数据库中保存Checkbox数据(2)
Oct 09 PHP
5.PHP的其他功能
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
PHP安全性漫谈
Jun 28 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
php构造函数实例讲解
Nov 13 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
php防止sql注入的方法详解
Feb 20 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP后期静态绑定实例浅析
Dec 21 PHP
php更新cookie内容的详细方法
Sep 30 PHP
php中引用符号(&)的使用详细介绍
Dec 06 #PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 #PHP
thinkPHP自动验证机制详解
Dec 05 #PHP
thinkPHP中_initialize方法实例分析
Dec 05 #PHP
php版微信自定义回复功能示例
Dec 05 #PHP
thinkPHP中配置的读取与C方法详解
Dec 05 #PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 #PHP
You might like
php5 and xml示例
2006/11/22 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
Python 正则表达式操作指南
2009/05/04 Python
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
python使用mysql数据库示例代码
2017/05/21 Python
python3处理含有中文的url方法
2018/05/10 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
党员个人对照检查材料
2014/10/01 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
大学生学年个人总结
2015/02/15 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书