文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

thinkphp中如何使用ajax方法

2023-07-02 09:55

关注

这篇文章主要介绍“thinkphp中如何使用ajax方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkphp中如何使用ajax方法”文章能帮助大家解决问题。

thinkphp中使用ajax方法;thinkphp使用ajax和PHP使用ajax的方法一样,不同点在于PHP的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法,可以利用ajax返回指定的数据,返回数据类型的修改等。

本文操作环境:Windows10系统、ThinkPHP5版、Dell G3电脑。

thinkphp中使用ajax方法

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

一、thinkphp使用ajax返回数据

先在AdminControllerMainController.class.php里面写一个方法 

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

在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>

在AdminControllerMainController.class.php里面写ajax处理的方法

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

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

二、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(自动收集表单)向数据库中添加数据

先写访问的方法

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

写访问的页面

<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>

写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做分页。主要注意第三方类怎么引用。

先做一个方法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();//调用显示方法在显示页面显示。    }

做显示页面

<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>

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 ".去掉;

五、输出字符串的长度

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

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);    }

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

(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,内容如下

<?phpfunction ChangDu($str){    return strlen($str);}?>

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

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

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

六、自动判断session是否存在

session的用途

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

(2)防止跳过登录;

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

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

<?phpnamespace 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,'请登录');

<?phpnamespace 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方法会继续往下执行。

<?phpnamespace HomeController;use ThinkController;class LoginController extends Controller{    public function login()    {        session("uid","zhangsan");//存一个session值    }}?>

关于“thinkphp中如何使用ajax方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯