thinkphp使用ajax

來源:互聯網
上載者:User

標籤:標題   oca   ddc   讀取   index   efault   瀏覽器   strlen   修改   

thinkphp使用ajax和之前使用ajax的方法一樣,不同點在於之前的ajax中的url指向了一個頁面,而thinkphp裡面的url需要指向一個操作方法。

 

一、thinkphp使用ajax返回資料

1.先在Admin\Controller\MainController.class.php裡面寫一個方法 

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

2.在Admin\View\Main檔案夾裡面建對應的顯示頁面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.在Admin\Controller\MainController.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進行設定,設定方式如下

  1. // 指定XML格式返回資料
  2. $data[‘status‘] = 1;
  3. $data[‘content‘] = ‘content‘;
  4. $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 \Home\libs\Page($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複製到thinkphp\Application\Home\libs裡面;

(3)namespace Home\libs;加上命名空間。

(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)在thinkphp\Application\Home裡面寫封裝的方法functions.php,內容如下

<?phpfunction 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是否存在。

<?phpnamespace Home\Controller;use Think\Controller;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 Home\Controller;use Home\Controller\FuController;//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 Home\Controller;use Think\Controller;class LoginController extends Controller{    public function login()    {        session("uid","zhangsan");//存一個session值    }}

 

thinkphp使用ajax

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.