thinkphp中使用ajax方法吗
时间:2022-06-17 [网络编程]作者:fabuyuan 浏览:4 次
thinkphp中使用ajax方法;thinkphp使用ajax和PHP使用ajax的方法一样,不同点在于PHP的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法,可以利用ajax返回指定的数据,返回数据类型的修改等。
本文操作环境:Windows10系统、ThinkPHP5版、Dell G3电脑。
thinkphp中使用ajax方法吗
thinkphp中使用ajax方法
thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法。
一、thinkphp使用ajax返回数据
1.先在AdminControllerMainController.class.php里面写一个方法
public function testajax()//ajax测试方法 { $this->show(); }
2.在AdminViewMain文件夹里面建对应的显示页面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.在AdminControllerMainController.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进行设置,设置方式如下
// 指定XML格式返回数据 $data['status'] = 1; $data['content'] = 'content'; $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 HomelibsPage($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复制到thinkphpApplicationHomelibs里面;
(3)namespace Homelibs;加上命名空间。
(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)在thinkphpApplicationHome里面写封装的方法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 HomeController; use ThinkController; 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 HomeController; use HomeControllerFuController;// 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 HomeController; use ThinkController; class LoginController extends Controller { public function login() { session("uid","zhangsan");//存一个session值 } } ?>
推荐学习:《PHP视频教程》
以上就是thinkphp中使用ajax方法吗的详细内容,更多请关注站长家园其它相关文章!
本文标签: thinkphp
转载请注明来源:thinkphp中使用ajax方法吗
本文永久链接地址:https://www.adminjie.com/post/13586.html
免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。
更多精彩内容
- VUE中V-IF条件判断改变元素的样式操作
- Discuz如何解决安装时报错run_sql_error
- 低版本VS项目在VS2019无法正常编译的问题
- PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
- Oracle数据库的实例/表空间/用户/表之间关系简单讲解
- RSA2是啥?PHP-RSA2签名验证怎么实现?
- app是什么应用程序的简称
- 华为dubal20是什么型号
- 小程序大小超限除了分包还能怎么做?如何避免和解决大小限制?
- 电脑显示信号线无连接是什么意思
- ana an00华为是什么型号
- html5中onclick是什么意思
- 超清视效是什么意思
- vivov1818a是什么手机型号
- html5的标题标记一共有几个等级

- 最新文章
-
-
php中restful风格是什么意思
php中restful风格指的是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义;RESTFUL适用于移动互联网厂商...
-
php中preg_replace怎么替换变量数据
在php中,“preg_replace”函数可以执行一个正则表达式的搜索和替换来替换变量数据,语法为“preg_replace(规定搜索的模式,用于替换的字符串...
-
vue抽象语法树和虚拟dom的区别是什么
vue抽象语法树和虚拟dom的区别:1、抽象语法树指的是源代码语法结构的一种抽象表示,而虚拟dom本质上就是一个普通的JS对象,用于描述视图的界面结构;2、虚拟...
-
vue3和vue2的语法有什么区别
vue3和vue2的语法区别:1、vue2使用的是webpack形式去构建项目,而vue3使用vite构建项目;2、vue2中可以使用pototype的形式去进...
-
66个面试问题,带你梳理MySQL知识点!数据库架构存储引擎日志SQL 优化索引锁事务高可用/性能运维
作为SQLBoy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分。当然,可能会现场写一些SQL语句,SQ语句可以通过牛客、Lee...
-
- 热门文章
-
-
VUE中V-IF条件判断改变元素的样式操作
这篇文章主要介绍了VUE中V-IF条件判断改变元素的样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧...
-
Discuz如何解决安装时报错run_sql_error
问题环境VMware虚拟机Centos7.3PHP7.0MySQL8.0NGINX1.14Discuz3.4问题还原本地环境为PHP5.6+MySQL5.6在安...
-
低版本VS项目在VS2019无法正常编译的问题
低版本VS项目在VS2019无法正常编译的问题这里指的编译并不准确,只是为了方便说明。后有(未安装),201?...
-
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
实现原理使用redis链表来做,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。实现步骤第一步,先将商品库存入队列/**.trigge...
-
Oracle数据库的实例/表空间/用户/表之间关系简单讲解
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。我们用这些高级权限账号...
-