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
<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.在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 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('?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值 } } ?>
推薦學習:《》
以上就是thinkphp中使用ajax方法嗎的詳細內容,更多請關注TW511.COM其它相關文章!