当前位置:

首页 > 编程开发 > thinkphp中如何使用ajax方法

thinkphp中如何使用ajax方法

thinkphp中使用ajax方法;thinkphp使用ajax和PHP使用ajax的方法一样,不同点在于PHP的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法,可以利用ajax返回指定的数据,返回数据类型的修改等。本文操作环境:Windows10系统、ThinkPHP5版、DellG3电脑。thinkphp中使用ajax方法thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而t

本文目录

    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返回数据

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

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

    2.在AdminViewMain文件夹里面建对应的显示页面testajax.html

    
    
    无标题文档
    
    
        
    
    
            $.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+""+data[a].name+"";
                    }
                    $("#nation").html(str);
                }
            })
    

    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

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

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

    1.先写访问的方法

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

    2.写访问的页面

    
    
    代号:
    名称:
    $("#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);                 }             })     })

    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.做显示页面

    
    
        
            代号
            名称
            父级代号
        
        
         
            {$v.areacode}
            {$v.areaname}
            {$v.parentareacode}
        
        
    
    
    {$xinxi}

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

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

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

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

    六、自动判断session是否存在

    1.session的用途

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

    (2)防止跳过登录;

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

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

    redirect("Home/Login/login",array(),5,'请登录');//第一个参数是跳转的地址,第二个参数是要传的值,第三个参数是跳转的时间,第四个参数是跳转时的提示信息。
                exit;
            }
        }
    }
    ?>

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

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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 thinkphp
    相关文章 更多
    thinkphp写接口代码的完整开发实例教程
    thinkphp写接口代码的完整开发实例教程

    本教程以ThinkPHP框架为例,通过文章管理API的具体业务场景,详细拆解路由定义、数据验证、控制器逻辑、数据模型操作、统一响应结构与全局异常处理的完整接口开发全流程。

    thinkphp项目部署指南详解服务器部署步骤
    thinkphp项目部署指南详解服务器部署步骤

    详细解析ThinkPHP项目在Linux服务器上的部署步骤,包括环境搭建、文件权限、Nginx配置及常见陷阱,提供可复制的代码示例与例外场景分析。

    IE浏览器怀旧版在线网址
    IE浏览器怀旧版在线网址

    IE浏览器怀旧版在线网址:一次精准的技术时光回溯 最近,不少老用户和怀旧爱好者在反复搜索一个问题:那个经典的Internet Explorer,如今还能在哪里原汁原味地体验到?答案指向一个特定的地址:https://ie.microsoft.com/legacy/。 这个网站远不止是一个简单的“皮肤

    Spring MVC+ajax进行信息验证的方法
    Spring MVC+ajax进行信息验证的方法

    采用AJAX与SpringMVC的异步验证,通过XMLHttpRequest对象实现局部数据交换,利用@ResponseBody返回JSON或字符串,结合@RequestBody解析请求体,完成表单无刷新校验,包括用户名重复检测与密码一致性验证。该方法提升交互效率,减少带宽占用,有效确保数据准确性,提升用户体验。

    PHP - AJAX 与 PHP
    PHP - AJAX 与 PHP

    AJAX使网页无需整体刷新即可与服务器交换数据并局部更新,实现无刷新体验。通过PHP实例,用户在输入框键入字符时,JavaScript创建XMLHttpRequest对象向PHP文件发送请求,服务器查找匹配姓名并返回结果,实现实时提示。跨域请求需采用JSONP或CORS解决方案。

    如何防止 AJAX 请求缓存导致动态内容无法实时更新
    如何防止 AJAX 请求缓存导致动态内容无法实时更新

    使用jQuery的.load()方法定时刷新页面时,浏览器或服务器缓存可能导致动态内容无法实时更新。通过为每次请求附加毫秒级时间戳参数,可强制URL变化绕过缓存。需注意时间戳参数必须置于片段选择器之前,且服务端响应头不应设置长时间缓存。

    为什么 TP6.0 模型关联为空?with 预加载与查询作用域的使用【ORM】
    为什么 TP6.0 模型关联为空?with 预加载与查询作用域的使用【ORM】

    ThinkPHP6.0模型关联返回null的常见原因包括:with闭包遗漏外键和主键字段、嵌套预加载语法不兼容低版本、关联方法内部误用with或field导致数据失控,以及全局作用域与软删除未显式处理。通过检查SQL日志、显式声明关键字段、升级版本或改用正确语法、清理关联方法中的查询条件即可解决。

    TP6.0 构建支持断点续传的超大附件上传服务【分片】
    TP6.0 构建支持断点续传的超大附件上传服务【分片】

    在ThinkPHP6.0中实现支持断点续传的超大附件上传,采用分片上传方案。前端按2MB切片并生成唯一chunkId,通过GET请求校验已传分片,用localStorage持久化上传状态。后端控制器接收分片存储,创建upload_status表管理进度,合并时加文件锁并校验MD5,确保生产环境下的可靠性与性能。

    thinkphp排序怎么实现动态排序 开发技巧解析
    thinkphp排序怎么实现动态排序 开发技巧解析

    动态排序时,order()应置于查询链式调用中且必须在paginate()之前;字段和方向需通过白名单硬校验,使用数组语法防SQL注入;分页调用appends()传递参数;多字段排序用关联数组,确保安全稳定。

    TP6.0 复杂业务逻辑下事务嵌套的回滚陷阱【DBA】
    TP6.0 复杂业务逻辑下事务嵌套的回滚陷阱【DBA】

    在复杂业务逻辑中,事务嵌套的回滚问题一直是ThinkPHP开发者容易踩的坑,尤其是TP6.0版本。先说核心结论:TP6.0并不支持真正意义上的嵌套事务。很多人以为调用两次Db::transaction()就能在内部自动管理回滚,实际上这只是一层“伪装”——内层事务的提交或回滚操作会被直接忽略,异常也

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。