thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法。

一、thinkphp使用ajax返回数据

1.先在Admin\Controller\MainController.class.php里面写一个方法 

public function testajax()//ajax测试方法{$this->show();}

2.在Admin\View\Main文件夹里面建对应的显示页面testajax.html

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script><!--jquery文件放在public/js里面。__PUBLIC__找到public目录-->
<title>无标题文档</title>
</head>
<body><select id="nation"></select>
</body>
<script type="text/javascript">$.ajax({url:"__CONTROLLER__/ajaxchuli",//这里指向的就不再是页面了,而是一个方法。data:{},type:"POST",dataType:"JSON",success: function(data){//alert(data[0].code);//这里要用索引,使用eq读取不出来数据。var str="";for(a in data){str = str+"<option value='"+data[a].code+"'>"+data[a].name+"</option>";}$("#nation").html(str);}})
</script>

3.在Admin\Controller\MainController.class.php里面写ajax处理的方法

public function ajaxchuli(){$n = D("Nation");//造一个nation表的模型对象$attr = $n->select();$this->ajaxReturn($attr);//ajax返回数据的方式,用ajaxReturn。}

4.这样就把数据显示在了页面

二、ajax返回数据类型的修改

在thinkphp中ajax默认的是返回JSON数据,可以通过配置DEFAULT_AJAX_RETURN进行设置,设置方式如下

  1. // 指定XML格式返回数据
  2. $data['status'] = 1;
  3. $data['content'] = 'content';
  4. $this->ajaxReturn($data,'xml');

如果是XML方式,会自动编码成XML字符串,如果是EVAL方式的话,只会输出字符串data数据。

示例:

public function ajaxchuli()
{
$this->ajaxReturn("hello","eval");//将返回数据的类型更改成字符串
}

同时也要讲ajax里面的数据类型改为TEXT

<script type="text/javascript">$.ajax({url:"__CONTROLLER__/ajaxchuli",//这里指向的就不再是页面了,而是一个方法。data:{},type:"POST",dataType:"TEXT",success: function(data){alert(data);//输出结果就是hello}})
</script>

三、用ajax和create(自动收集表单)向数据库中添加数据

1.先写访问的方法

public function addajax(){$this->show();}

2.写访问的页面

<body>
<div>代号:<input type="tel" id="code" /></div>
<div>名称:<input type="tel" id="name" /></div>
<div><input type="button" id="btn" value="添加" /></div>
</body>
<script type="text/javascript">$("#btn").click(function(){var code = $("#code").val();var name = $("#name").val();$.ajax({url:"__CONTROLLER__/addchuli",data:{Code:code,Name:name},//要用create方法,这里的列名就要和数据库中的列名一样,这里的首字母要大写。type:"POST",dataType:"TEXT",success: function(data){alert(data);}})})
</script>

3.写ajax处理的方法

public function addchuli(){$n = D("Nation");$n->create();//自动收集表单$r = $n->add();//调用添加的方法if($r){$this->ajaxReturn("OK","eval");//如果添加成功输出“OK”,eval代表数据类型为字符串。}else{$this->ajaxReturn("NO","eval");//如果添加失败,就输出”NO“。}}

四、thinkphp中用ajax做分页。主要注意第三方类怎么引用。

1.先做一个方法xianshi();

public function xianshi(){$n = D("chinastates");//造chinastates表的对象$shuliang = $n->count();//取出数据的总条数$page = new \Home\libs\Page($shuliang,15);//将page文件类引入。()里面需要参数,第一个参数是数据的总数量,第二个是每页显示多少条数据。所以上面要先求出数量。$xinxi = $page->fpage();        $attr = $n->limit($page->limit)->select();//查询出所有数据,limit(0,15),需要修改Page.class.php文件中的第57行$this->limit = "LIMIT ".$this->setLimit();,将 "LIMIT ".去掉,如果不去掉的话,将会显示limit(limit(0,15)),度了1个limit。$this->assign("shuju",$attr);//将查询出的数据都注入显示页面$this->assign("xinxi",$xinxi);$this->show();//调用显示方法在显示页面显示。}

2.做显示页面

<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0"><tr><td>代号</td><td>名称</td><td>父级代号</td></tr><foreach name="shuju" item="v" ><tr><td>{$v.areacode}</td><td>{$v.areaname}</td><td>{$v.parentareacode}</td></tr></foreach>
</table>
<div>{$xinxi}</div><!--显示分页信息-->
</body>

3.Page.class.php需要更改的地方

(1)文件名原来为page.class.php需要改为Page.class.php,要和类名保持一致;

(2)把Page.class.php复制到thinkphp\Application\Home\libs里面;

(3)namespace Home\libs;加上命名空间。

(4)修改Page.class.php文件中的第57行$this->limit = "LIMIT ".$this->setLimit();,将 "LIMIT ".去掉;

五、输出字符串的长度

1.封装的方法写在同一个控制器里面

public function test(){$str = "volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模版赋值:";//给str一个字符串$m = A("Main");//造一个Main控制器的对象echo $m->ChangDu($str);//输出$str的长度}public function ChangDu($str)//ChangDu方法,输出字符串的长度。{return strlen($str);}

2.封装的方法不在同一个控制器里面

(1)在Maincontroller.class.php里面只写下面的方法

public function test(){$str = "volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模版赋值:";//给str一个字符串$m = A("Main");//造一个Main控制器的对象echo ChangDu($str);//输出$str的长度}

(2)在thinkphp\Application\Home里面写封装的方法functions.php,内容如下

<?php
function ChangDu($str)
{return strlen($str);
}

(3)这样写完以后在浏览器中输入http://localhost/thinkphp/index.php/Home/Main/test读取不到字符串的长度,还需要在配置文件里面加上一句代码:

"LOAD_EXT_FILE"=>"functions",//自动加载函数库类

家还是那个这句代码后才能读取到字符串的长度。

六、自动判断session是否存在

1.session的用途

(1)用来存用户名等信息;

(2)防止跳过登录;

2.如果按照以前的方式,在每个页面或者方法里面都要判断session是否存在。

(1)造一个Fucontroller类,用来判断session是否存在。

<?php
namespace Home\Controller;
use Think\Controller;
class FuController extends Controller//造一个FuController类,用来判断session值是否存在。
{public function __construct()//造一个构造函数{if(session('?uid'))//判断session是否存在,如果存在,什么也不做。{}else//如果不存在{//$url = U("Home/Login/login");$this->redirect("Home/Login/login",array(),5,'请登录');//第一个参数是跳转的地址,第二个参数是要传的值,第三个参数是跳转的时间,第四个参数是跳转时的提示信息。exit;}}
}

(2)写一个test方法,注意继承的父类是FuController,而不是Controller。第一次走这个页面时会跳转到login方法里面,因为没有session值,会执行上面的$this->redirect("Home/Login/login",array(),5,'请登录');

<?php
namespace Home\Controller;
use Home\Controller\FuController;//
class MainController extends FuController//这里继承的父类更改为FuController
{public function test(){$str = "volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模版赋值:";//给str一个字符串$m = A("Main");//造一个Main控制器的对象echo ChangDu($str);//输出$str的长度}
}

(3)写一个login方法。上面的test方法跳转到login方法以后会存上session,再走test方法就会出现字符串的长度,因为有了sesion值,test方法会继续往下执行。

<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller
{public function login(){session("uid","zhangsan");//存一个session值}
}

转载于:https://www.cnblogs.com/chenshanhe/p/7200529.html

thinkphp使用ajax相关推荐

  1. php ajax 长轮询 表单,Thinkphp结合AJAX长轮询实现PC与APP推送详解

    前言 本文主要给大家介绍的关于Thinkphp结合AJAX长轮询实现PC与APP推送的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍. 实现逻辑 某个操作(比如新建一条公告)后,触发 ...

  2. php ajax二级联下拉菜单,ThinkPHP和Ajax 实现二级联动的下拉菜单

    这篇文章主要介绍了关于ThinkPHP和Ajax 实现二级联动的下拉菜单,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 联动菜单的数据存在数据库,可以随时通过对数据库添加删除修改改变菜 ...

  3. ajax分页类 php,thinkphp之ajax分页类

    class IndexAction extends Action { public function index() { import("@.ORG.Page"); //导入分页类 ...

  4. ajax下拉框二级联动 php,关于thinkphp 与 ajax 实现二级联动下拉列表

    表的结构 cId 分类id cName 分类名称 gid 父级id 这是我的HTML页面 <volist name="rs" id="val"> & ...

  5. thinkPHP利用ajax异步上传图片并显示、删除

    近来学习tp5的过程中,项目中有个发帖功能,选择主题图片.如下: 利用原始的文件上传处理,虽然通过原始js语句能实时显示上传图片,但是这样的话会涉及很多兼容问题.使用ajax技术,实现选择性删除所选图 ...

  6. ajax thinkphp配合ajax的简单列子

    我自己使用的一个ajax的列子: HTML: <select class="form-control m-b" id="clien" name=" ...

  7. ThinkPHP + Ajax 实现2级联动下拉菜单

    为什么80%的码农都做不了架构师?>>>    首先是数据库的设计.分类表叫cate. 我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父 ...

  8. Thinkphp ajax分页

    Thinkphp中用ajax分页和普通的ajax分页的区别在于处理位置的不同,thinkphp是在控制器的方法中处理ajax传的值,然后返回数据.下面是一个点击事件触发后,显示的内容用ajax分页. ...

  9. php没有上级分类的联动,ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单...

    首先是数据库的设计.分类表叫cate. 我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为 ...

  10. ThinkPHP+JQuery实现ajax无刷新登录验证(详解+相关问题)

    ThinkPHP+JQuery实现ajax无刷新登录验证 摘要: 使用原生javascript进行ajax实现无刷新更改页面内容的复杂性尽人皆知,而jquery对ajax传递进行了封装和优化,因此通过 ...

最新文章

  1. java怎么访问视图_springmvc-直接访问视图文件
  2. 关于云原生需要了解什么
  3. HTML+CSS+JS实现 ❤️美女拼图游戏❤️
  4. ASP中随机函数Randomize的使用
  5. git删除本地tag和远程tag
  6. Unity3D UGUI不规则图片点击事件处理
  7. 基于 Bootstrp 构建简洁的登录框并实现记住我功能
  8. J2SDK 安装配置指南
  9. android背景置灰,android view置灰(哀悼日)
  10. Ubuntu 11.10文本文档乱码
  11. PHP的性能演进(从PHP5.0到PHP7.1的性能全评测)
  12. Java调用百度/高德地图API实现根据经纬度查地名
  13. LTE核心网中,SGW、PGW、PCRF都有计费的功能,请问这几个网元的计费功能有什么区别与联系呢?...
  14. win8能发挥服务器性能吗,win10系统和win8.1系统哪个更好用?windows10和windows8.1性能对比解析...
  15. 2022年服务器行业研究报告
  16. 【打印机】斑马打印机指令简介
  17. 基础练习21- Sine之舞(python答案)
  18. 信号与系统陈后金matlab,信号与系统(陈后金)_MATLAB.ppt
  19. Vrep的matlab接口
  20. PostgreSQL 关于Jsonb字段的处理详解(长期更)

热门文章

  1. 思考,思考,不停思考——《技术领导之路》序言
  2. PGM:贝叶斯网的参数估计
  3. Matplotlib Toolkits:三维绘图工具包matplotlib.mplot3d
  4. 利用dlib库(Python)实现实时(摄像头)人脸检测以及特征点标定(landmark))
  5. ref改变样式 vue_我用React和Vue构建了同款应用,对比看看(2020版)
  6. create方法 eslint关闭_详解create-react-app 自定义 eslint 配置
  7. python打包,上传包知识点学习
  8. 常用数据库优化方案(五)
  9. Redis set集合结构及命令详解
  10. ASP.NET绑定控件语法