溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

thinkphp中如何使用ajax方法

發(fā)布時(shí)間:2022-06-17 09:56:08 來源:億速云 閱讀:372 作者:iii 欄目:編程語言

這篇文章主要介紹“thinkphp中如何使用ajax方法”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“thinkphp中如何使用ajax方法”文章能幫助大家解決問題。

thinkphp中使用ajax方法;thinkphp使用ajax和PHP使用ajax的方法一樣,不同點(diǎn)在于PHP的ajax中的url指向了一個(gè)頁面,而thinkphp里面的url需要指向一個(gè)操作方法,可以利用ajax返回指定的數(shù)據(jù),返回?cái)?shù)據(jù)類型的修改等。

本文操作環(huán)境:Windows10系統(tǒng)、ThinkPHP5版、Dell G3電腦。

thinkphp中使用ajax方法

thinkphp使用ajax和之前使用ajax的方法一樣,不同點(diǎn)在于之前的ajax中的url指向了一個(gè)頁面,而thinkphp里面的url需要指向一個(gè)操作方法。

一、thinkphp使用ajax返回?cái)?shù)據(jù)

1.先在AdminControllerMainController.class.php里面寫一個(gè)方法 

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

2.在AdminViewMain文件夾里面建對應(yīng)的顯示頁面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>無標(biāo)題文檔</title>
</head>
<body>
    <select id="nation"></select>
</body>
<script type="text/javascript">
        $.ajax({
            url:"__CONTROLLER__/ajaxchuli",//這里指向的就不再是頁面了,而是一個(gè)方法。
            data:{},
            type:"POST",
            dataType:"JSON",
            success: function(data){
                //alert(data[0].code);//這里要用索引,使用eq讀取不出來數(shù)據(jù)。
                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");//造一個(gè)nation表的模型對象
        $attr = $n->select();
        
        $this->ajaxReturn($attr);//ajax返回?cái)?shù)據(jù)的方式,用ajaxReturn。
    }

4.這樣就把數(shù)據(jù)顯示在了頁面

二、ajax返回?cái)?shù)據(jù)類型的修改

在thinkphp中ajax默認(rèn)的是返回JSON數(shù)據(jù),可以通過配置DEFAULT_AJAX_RETURN進(jìn)行設(shè)置,設(shè)置方式如下

// 指定XML格式返回?cái)?shù)據(jù)
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data,'xml');

如果是XML方式,會(huì)自動(dòng)編碼成XML字符串,如果是EVAL方式的話,只會(huì)輸出字符串data數(shù)據(jù)。

示例:

public function ajaxchuli()
{
$this->ajaxReturn("hello","eval");//將返回?cái)?shù)據(jù)的類型更改成字符串
}

同時(shí)也要講ajax里面的數(shù)據(jù)類型改為TEXT

<script type="text/javascript">
        $.ajax({
            url:"__CONTROLLER__/ajaxchuli",//這里指向的就不再是頁面了,而是一個(gè)方法。
            data:{},
            type:"POST",
            dataType:"TEXT",
            success: function(data){
                alert(data);//輸出結(jié)果就是hello
            }
        })
</script>

三、用ajax和create(自動(dòng)收集表單)向數(shù)據(jù)庫中添加數(shù)據(jù)

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方法,這里的列名就要和數(shù)據(jù)庫中的列名一樣,這里的首字母要大寫。
                type:"POST",
                dataType:"TEXT",
                success: function(data){
                    alert(data);
                }
            })
    })
</script>

3.寫ajax處理的方法

public function addchuli()
    {
        $n = D("Nation");
        $n->create();//自動(dòng)收集表單
        $r = $n->add();//調(diào)用添加的方法
        if($r)
        {
            $this->ajaxReturn("OK","eval");//如果添加成功輸出“OK”,eval代表數(shù)據(jù)類型為字符串。
        }
        else
        {
            $this->ajaxReturn("NO","eval");//如果添加失敗,就輸出”NO“。
        }
    }

四、thinkphp中用ajax做分頁。主要注意第三方類怎么引用。

1.先做一個(gè)方法xianshi();

public function xianshi()
    {
        $n = D("chinastates");//造chinastates表的對象
        $shuliang = $n->count();//取出數(shù)據(jù)的總條數(shù)
        $page = new HomelibsPage($shuliang,15);//將page文件類引入。()里面需要參數(shù),第一個(gè)參數(shù)是數(shù)據(jù)的總數(shù)量,第二個(gè)是每頁顯示多少條數(shù)據(jù)。所以上面要先求出數(shù)量。
        
        $xinxi = $page->fpage();        
        
        $attr = $n->limit($page->limit)->select();//查詢出所有數(shù)據(jù),limit(0,15),需要修改Page.class.php文件中的第57行$this->limit = "LIMIT ".$this->setLimit();,將 "LIMIT ".去掉,如果不去掉的話,將會(huì)顯示limit(limit(0,15)),度了1個(gè)limit。
        $this->assign("shuju",$attr);//將查詢出的數(shù)據(jù)都注入顯示頁面
        $this->assign("xinxi",$xinxi);
        $this->show();//調(diào)用顯示方法在顯示頁面顯示。
    }

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復(fù)制到thinkphpApplicationHomelibs里面;

(3)namespace Homelibs;加上命名空間。

(4)修改Page.class.php文件中的第57行$this->limit = "LIMIT ".$this->setLimit();,將 "LIMIT ".去掉;

五、輸出字符串的長度

1.封裝的方法寫在同一個(gè)控制器里面

public function test()
    {
        $str = "volist標(biāo)簽通常用于查詢數(shù)據(jù)集(select方法)的結(jié)果輸出,通常模型的select方法返回的結(jié)果是一個(gè)二維數(shù)組,可以直接使用volist標(biāo)簽進(jìn)行輸出。在控制器中首先對模版賦值:";//給str一個(gè)字符串
        $m = A("Main");//造一個(gè)Main控制器的對象
        echo $m->ChangDu($str);//輸出$str的長度
    }
    
    public function ChangDu($str)//ChangDu方法,輸出字符串的長度。
    {
        return strlen($str);
    }

2.封裝的方法不在同一個(gè)控制器里面

(1)在Maincontroller.class.php里面只寫下面的方法

public function test()
    {
        $str = "volist標(biāo)簽通常用于查詢數(shù)據(jù)集(select方法)的結(jié)果輸出,通常模型的select方法返回的結(jié)果是一個(gè)二維數(shù)組,可以直接使用volist標(biāo)簽進(jìn)行輸出。在控制器中首先對模版賦值:";//給str一個(gè)字符串
        $m = A("Main");//造一個(gè)Main控制器的對象
        echo ChangDu($str);//輸出$str的長度
    }

(2)在thinkphpApplicationHome里面寫封裝的方法functions.php,內(nèi)容如下

<?php
function ChangDu($str)
{
    return strlen($str);
}
?>

(3)這樣寫完以后在瀏覽器中輸入http://localhost/thinkphp/index.php/Home/Main/test讀取不到字符串的長度,還需要在配置文件里面加上一句代碼:

"LOAD_EXT_FILE"=>"functions",//自動(dòng)加載函數(shù)庫類

家還是那個(gè)這句代碼后才能讀取到字符串的長度。

六、自動(dòng)判斷session是否存在

1.session的用途

(1)用來存用戶名等信息;

(2)防止跳過登錄;

2.如果按照以前的方式,在每個(gè)頁面或者方法里面都要判斷session是否存在。

(1)造一個(gè)Fucontroller類,用來判斷session是否存在。

<?php
namespace HomeController;
use ThinkController;
class FuController extends Controller//造一個(gè)FuController類,用來判斷session值是否存在。
{
    public function __construct()//造一個(gè)構(gòu)造函數(shù)
    {
        if(session('?uid'))//判斷session是否存在,如果存在,什么也不做。
        {
            
        }
        else//如果不存在
        {
            //$url = U("Home/Login/login");
            $this->redirect("Home/Login/login",array(),5,'請登錄');//第一個(gè)參數(shù)是跳轉(zhuǎn)的地址,第二個(gè)參數(shù)是要傳的值,第三個(gè)參數(shù)是跳轉(zhuǎn)的時(shí)間,第四個(gè)參數(shù)是跳轉(zhuǎn)時(shí)的提示信息。
            exit;
        }
    }
}
?>

(2)寫一個(gè)test方法,注意繼承的父類是FuController,而不是Controller。第一次走這個(gè)頁面時(shí)會(huì)跳轉(zhuǎn)到login方法里面,因?yàn)闆]有session值,會(huì)執(zhí)行上面的$this->redirect("Home/Login/login",array(),5,'請登錄');

<?php
namespace HomeController;
use HomeControllerFuController;//
class MainController extends FuController//這里繼承的父類更改為FuController
{
    public function test()
    {
        $str = "volist標(biāo)簽通常用于查詢數(shù)據(jù)集(select方法)的結(jié)果輸出,通常模型的select方法返回的結(jié)果是一個(gè)二維數(shù)組,可以直接使用volist標(biāo)簽進(jìn)行輸出。在控制器中首先對模版賦值:";//給str一個(gè)字符串
        $m = A("Main");//造一個(gè)Main控制器的對象
        echo ChangDu($str);//輸出$str的長度
    }
}
?>

(3)寫一個(gè)login方法。上面的test方法跳轉(zhuǎn)到login方法以后會(huì)存上session,再走test方法就會(huì)出現(xiàn)字符串的長度,因?yàn)橛辛藄esion值,test方法會(huì)繼續(xù)往下執(zhí)行。

<?php
namespace HomeController;
use ThinkController;
class LoginController extends Controller
{
    public function login()
    {
        session("uid","zhangsan");//存一個(gè)session值
    }
}
?>

關(guān)于“thinkphp中如何使用ajax方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI