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值
}
}
?>

thinkphp使用ajax的更多相关文章

  1. ThinkPHP中ajax提交数据

    最近在做项目时遇到了一些需要从页面用ajax提交数据到后台的操作,无奈本人技术有限,网上苦寻,研究了一下ajax和thinkPHP的结合,黄天不负苦心人,终于搞定了. 闲话少叙,进入正题:我需要从页面 ...

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

    本文分析了thinkphp中AJAX返回ajaxReturn()方法.分享给大家供大家参考,具体如下: 系统支持任何的AJAX类库,Action类提供了ajaxReturn方法用于AJAX调用后返回数 ...

  3. thinkphp+jquery+ajax前后端交互注册验证

    thinkphp+jquery+ajax前后端交互注册验证,界面如下 register.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...

  4. TP框架---thinkphp使用ajax

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

  5. thinkphp中ajax使用实例(thinkphp内置支持ajax)

    thinkphp中ajax使用实例(thinkphp内置支持ajax) 一.总结 1.thinkphp应该是内置支持ajax的,所以请求类型里面才会有是否是ajax // 是否为 Ajax 请求 if ...

  6. Thinkphp框架 -- ajax无刷新上传图片

    用Thinkphp框架做无刷新上传图片 视图层 View <!doctype html> <html lang="en"> <head> < ...

  7. thinkphp中ajax用户名校验

    ajax实在是太神奇了,刚刚接触,不足之处,请大家指正. 采用Ajax方式进行页面无刷新提示,来检测用户名是否存在. 搭建一个thinkphp的环境,在index.html中,ajax代码如下: &l ...

  8. thinkphp+datatables+ajax 大量数据服务器端查询

    今天一白天全耗在这个问题上了,知乎2小时除外... 现在19:28分,记下来以备后查. 问题描述:从后台数据库查询人员信息,1w多条,使用一个好看的基于bootstrap的模板 Bootstrap-A ...

  9. TP框架---thinkphp中ajax分页

    //点击类别后要显示的内容 public function pagechuli3()//这个方法的功能是根据ajax传过来的值查询数据,再将查询出来的数据返回到ajax,返回的默认是JSON类型. { ...

随机推荐

  1. 详解java定时任务

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析JavaTimer定时器. ...

  2. java编码过滤器

    1.java编码过滤器的作用: java过滤器能够对目标资源的请求和响应进行截取,过滤信息执行的优先级高于servlet. 2.java过滤器的使用: (1)编写一个普通的java类,实现Filter ...

  3. 在windows系统下,在终端快速打开某个路径

    进了一个文件夹,要在这个文件夹上直接打开CMD,而不是在系统C盘打开CMD 1) 在此文件夹窗口内空白区域右键单击(需要同时按住Shift),从菜单中选择"在此处打开命令行窗口"的项:2) 快捷键Al ...

  4. mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理

    mongodb一直都在不断的更新,不断的发展,那些非常好玩也非常实用的功能都逐步加入到了mongodb中,这不就有了本篇对ttlindex的介绍, 刚好我们的生产业务场景中就有这个一个案例... 一: ...

  5. 6-1 bash脚本编程之四 整数测试及特殊变量

    1. exit:退出脚本.可以定义,如 #exit 数字(0-255) 2. 文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通 -d FILE:测试指定路径是否为目录 - ...

  6. apache 开机自启动脚本设置

    默认我们源码编译安装apache,是不能使用service这个命令来启动的,通常我们启动的命令是: [root@localhost httpd-2.2.16]# /usr/local/apache2/ ...

  7. VS2015+Win10 调试DirectX 报错

    安装完Win10调试程序突然在这个地方报错: #if (defined(DEBUG) || defined(_DEBUG)) deviceFlags |= D3D11_CREATE_DEVICE_DE ...

  8. Android Studio导入github下载的project和module

    前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...

  9. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  10. Android开发用过的十大框架

    http://blog.csdn.net/u011200604/article/details/51695096 本文系多方综合与转载整合,意在Android开发中能够知道和使用一些好用的第三方支持, ...