首頁 > php框架 > ThinkPHP > 主體

thinkphp使用ajax方法嗎

WBOY
發布: 2022-06-16 17:47:42
原創
2906 人瀏覽過

thinkphp中使用ajax方法;thinkphp使用ajax和PHP使用ajax的方法一樣,不同點在於PHP的ajax中的url指向了一個頁面,而thinkphp裡面的url需要指向一個操作方法,可以利用ajax傳回指定的數據,傳回資料類型的修改等。

thinkphp使用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=&#39;"+data[a].code+"&#39;>"+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[&#39;status&#39;] = 1;
$data[&#39;content&#39;] = &#39;content&#39;;
$this->ajaxReturn($data,&#39;xml&#39;);
登入後複製

如果是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(&#39;?uid&#39;))//判断session是否存在,如果存在,什么也不做。
        {
            
        }
        else//如果不存在
        {
            //$url = U("Home/Login/login");
            $this->redirect("Home/Login/login",array(),5,&#39;请登录&#39;);//第一个参数是跳转的地址,第二个参数是要传的值,第三个参数是跳转的时间,第四个参数是跳转时的提示信息。
            exit;
        }
    }
}
?>
登入後複製

(2)寫一個test方法,注意繼承的父類別是FuController,而不是Controller。第一次走這個頁面時會跳到login方法裡面,因為沒有session值,會執行上面的$this->redirect("Home/Login/login",array(),5,'請登入') ;

登入後複製

(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方法嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板