TP框架---thinkphp使用ajax
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进行设置,设置方式如下
// 指定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 \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值
}
}
TP框架---thinkphp使用ajax的更多相关文章
- TP框架---thinkphp中ajax分页
//点击类别后要显示的内容 public function pagechuli3()//这个方法的功能是根据ajax传过来的值查询数据,再将查询出来的数据返回到ajax,返回的默认是JSON类型. { ...
- TP框架---thinkphp表单验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面 ...
- TP框架---thinkphp基础知识
php框架 发瑞 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困 ...
- TP框架---thinkphp模型
1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...
- TP框架---thinkphp修改删除数据
1.在控制器MainController里面写一个方法,调用Nation表中的数据. public function zhuyemian() { $n = D("Nation"); ...
- TP框架---thinkphp查询和添加数据
查询 <?php namespace Admin\Controller; use Think\Controller; class MainController extends Controlle ...
- 第一零二天上课 PHP TP框架 引入文件路径问题和调用验证码的方式
外部文件引入到视图模板的方式 1,将外部文件放在Public文件夹下,用load标签引入 2,在模板出书写引入代码(方法有很多,只有以下方法不容易出问题) <load h ...
- tp框架表单验证 及ajax
之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...
- tp框架实现ajax
不墨迹,直接进主题. tp框架实现ajax 首先,我们先做一个testajax.html用来显示页面(只是一个简单的下拉列表^_^) <!DOCTYPE html PUBLIC "-/ ...
随机推荐
- viewpager+fragment出现TransactionTooLargeException的大坑!!!
最近apk包发给部分测试用户,反馈出现很多崩溃,异常是android.os.TransactionTooLargeException,看表面意思就是传送的数据太大,可是检查代码并没有传输很大的数据啊. ...
- Codeforces Gym100971 G.Repair-思维题(切矩形板子) (IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13)
这个题就是一块大板子,问你能不能切成两块要求的长宽的两块板子,一开始是按切板子想的,感觉有点麻烦. 直接反过来想,把两块要求的板子拼起来,填成一个大板子,看填出来的这个板子和题目给的板子比较,小于等于 ...
- Java多线程之Thread、Runnable、Callable及线程池
一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...
- 莫队浅谈&题目讲解
莫队浅谈&题目讲解 一.莫队的思想以及莫队的前置知识 莫队是一种离线的算法,他的实现借用了分块的思想.在学习莫队之前,本人建议学习一下分块,并对其有一定的理解. 二.莫队 现给出一道例题:bz ...
- ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0 转
作者:yourber 命名是非常困难的事情,微软这次为了和ASP.NET4.6做区分,采用了全新的命名方式ASP.NET Core 1.0,它是一个全新的框架. ASP.NET 在过去的 15 年里是 ...
- mongodb培训
写在前面 公司组织的技术培训,虽然刚接触mongodb没多久,算是入门吧,就组织一次mongodb的入门ppt培训.包括nosql的简单介绍,以及mongodb的一些优缺点,最后包括mongodb的一 ...
- windows的iis做后门,隐藏访问,无日志
windows下的iis5/iis6做后门,隐藏访问,不留访问记录或者不留日志 好不容易攻下一台Windows2000/2003 IIS服务器,你一定会想,怎样才能长期占有这个“肉鸡”呢?聪明的你肯定 ...
- 【小程序】微信小程序开发实践
帐号相关流程 注册范围 企业 政府 媒体 其他组织 换句话讲就是不让个人开发者注册. :) 填写企业信息 不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的. 填写公司机构信 ...
- 分析cocos2d-x的lua项目中的工具方法
在创建完cocos2d-x的lua项目后.打开项目的Resources中的extern.lua文件.里面有两个用于面向对象的方法.一个是用于克隆,一个是用于继承. 代码分析例如以下 --克隆一个对象 ...
- Vmware+gdb调试Linux内核——工欲善其事,必先利其器
今天我最终忍受不了qemu的低速跟不可理喻的各种bug,開始寻找新的调试内核的方法.然后想到了Vmware,那么成熟的虚拟机怎么可能调试不了内核.于是尝试了一番,发现结果很的棒!所以立刻奋笔疾书.把这 ...