thinkphp中使用ajax方法;thinkphp使用ajax和PHP使用ajax的方法一樣,不同點在于PHP的ajax中的url指向了一個頁面,而thinkphp里面的url需要指向一個操作方法,可以利用ajax返回指定的數據,返回數據類型的修改等。
本文操作環境:Windows10系統、ThinkPHP5版、Dell G3電腦。
thinkphp中使用ajax方法嗎
thinkphp中使用ajax方法
thinkphp使用ajax和之前使用ajax的方法一樣,不同點在于之前的ajax中的url指向了一個頁面,而thinkphp里面的url需要指向一個操作方法。
一、thinkphp使用ajax返回數據
1.先在AdminControllerMainController.class.php里面寫一個方法
立即學習“PHP免費學習筆記(深入)”;
public?function?testajax()//ajax測試方法 ????{ ????????$this->show(); ????}
2.在AdminViewMain文件夾里面建對應的顯示頁面testajax.html
<meta><script></script><!--jquery文件放在public/js里面。__PUBLIC__找到public目錄--><title>無標題文檔</title> ????<select></select><script> $.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+""; } $("#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['status']?=?1; $data['content']?=?'content'; $this->ajaxReturn($data,'xml');
如果是XML方式,會自動編碼成XML字符串,如果是EVAL方式的話,只會輸出字符串data數據。
示例:
public?function?ajaxchuli() { $this->ajaxReturn("hello","eval");//將返回數據的類型更改成字符串 }
同時也要講ajax里面的數據類型改為TEXT
<script> $.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.寫訪問的頁面
<div>代號:<input> </div> <div>名稱:<input> </div> <div><input></div> <script> $("#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.做顯示頁面
代號 | 名稱 | 父級代號 |
{$v.areacode} | {$v.areaname} | {$v.parentareacode} |
3.Page.class.php需要更改的地方
(1)文件名原來為page.class.php需要改為Page.class.php,要和類名保持一致;
(2)把Page.class.php復制到thinkphpApplicationHomelibs里面;
(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('?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 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方法會繼續往下執行。
<?php namespace HomeController; use ThinkController; class LoginController extends Controller { public function login() { session("uid","zhangsan");//存一個session值 } } ?>
推薦學習:《PHP視頻教程》