Rumah > Artikel > rangka kerja php > Adakah anda menggunakan kaedah ajax dalam thinkphp?
Kaedah ajax digunakan dalam thinkphp; thinkphp menggunakan ajax dengan cara yang sama seperti PHP menggunakan ajax. kaedah operasi, yang boleh digunakan Ajax mengembalikan data yang ditentukan, mengembalikan pengubahsuaian jenis data, dsb.
Persekitaran pengendalian artikel ini: sistem Windows 10, ThinkPHP versi 5, komputer Dell G3.
Gunakan kaedah ajax dalam thinkphp
Kaedah menggunakan ajax dalam thinkphp adalah sama seperti kaedah menggunakan ajax sebelum ini Perbezaannya ialah sebelum URL dalam ajax menghala ke halaman, manakala url dalam thinkphp perlu menunjuk kepada kaedah operasi.
1. thinkphp menggunakan ajax untuk mengembalikan data
1 Mula-mula tulis kaedah dalam AdminControllerMainController.class.php
public function testajax()//ajax测试方法 { $this->show(); }
2 Bina halaman paparan yang sepadan testajax.html dalam folder AdminViewMain
<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 Tulis kaedah pemprosesan ajax dalam AdminControllerMainController.class.php
public function ajaxchuli() { $n = D("Nation");//造一个nation表的模型对象 $attr = $n->select(); $this->ajaxReturn($attr);//ajax返回数据的方式,用ajaxReturn。 }
4 data Dipaparkan pada halaman
2. Pengubahsuaian jenis data pengembalian ajax
Dalam thinkphp, ajax mengembalikan data JSON secara lalai, yang boleh ditetapkan dengan mengkonfigurasi DEFAULT_AJAX_RETURN kaedah tetapan Seperti berikut
// 指定XML格式返回数据 $data['status'] = 1; $data['content'] = 'content'; $this->ajaxReturn($data,'xml');
Jika ia adalah mod XML, ia akan dikodkan secara automatik ke dalam rentetan XML Jika ia adalah mod EVAL, hanya data data rentetan akan dikeluarkan.
Contoh:
public function ajaxchuli() { $this->ajaxReturn("hello","eval");//将返回数据的类型更改成字符串 }
Pada masa yang sama, kita juga perlu menukar jenis data dalam ajax kepada TEKS
<script type="text/javascript"> $.ajax({ url:"__CONTROLLER__/ajaxchuli",//这里指向的就不再是页面了,而是一个方法。 data:{}, type:"POST", dataType:"TEXT", success: function(data){ alert(data);//输出结果就是hello } }) </script>
3 dan buat (Borang pengumpulan automatik) Tambah data ke pangkalan data
1 Tulis kaedah akses dahulu
public function addajax() { $this->show(); }
2 Tulis halaman yang diakses
<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. Tulis kaedah pemprosesan 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“。 } }
4. Gunakan ajax untuk paging dalam thinkphp. Terutamanya memberi perhatian kepada cara kelas pihak ketiga dirujuk.
1. Mula-mula buat kaedah 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. Buat halaman paparan
<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 diperlukan Perubahan
(1) Nama fail asalnya ialah page.class.php dan perlu ditukar kepada Page.class.php, yang mesti konsisten dengan nama kelas
(; 2) Tukar Page.class Salin .php kepada thinkphpApplicationHomelibs; (3) ruang nama Homelibs;
(4) Ubah suai baris 57 dalam fail Page.class.php $this->limit = "LIMIT ".$this->setLimit(); dan alih keluar "LIMIT ";
5. Panjang rentetan keluaran1 Kaedah enkapsulasi ditulis dalam pengawal yang sama
2 pengawal yang samapublic 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); }
(1) Hanya tulis kaedah berikut dalam Maincontroller.class.php
(2) Tulis kaedah encapsulated functions.php dalam thinkphpApplicationHome, Kandungannya adalah seperti berikutpublic function test() { $str = "volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。在控制器中首先对模版赋值:";//给str一个字符串 $m = A("Main");//造一个Main控制器的对象 echo ChangDu($str);//输出$str的长度 }(3) Selepas menulis ini, masukkan http://localhost/thinkphp/index.php/Home/Main/test dalam pelayar dan tidak boleh membaca panjang rentetan Anda perlu menambah a kod ke fail konfigurasi:
<?php function ChangDu($str) { return strlen($str); } ?>
"LOAD_EXT_FILE"=>"functions",//Muat secara automatik kelas perpustakaan fungsi
sebelum anda boleh membacanya selepas kod ini Panjang rentetan.
6 Secara automatik menentukan sama ada sesi itu wujud1 Tujuan sesi
(1) Digunakan untuk menyimpan nama pengguna dan maklumat lain; 🎜>
(2) Elakkan melangkau log masuk; 2 Jika anda mengikuti kaedah sebelumnya, anda mesti menentukan sama ada sesi itu wujud dalam setiap halaman atau kaedah. (1) Buat kelas Fucontroller untuk menentukan sama ada sesi itu wujud.(2) Tulis kaedah ujian Ambil perhatian bahawa kelas induk yang diwarisi ialah FuController, bukan Pengawal. Kali pertama anda melawat halaman ini, anda akan melompat ke kaedah log masuk Kerana tiada nilai sesi, $this->redirect("Home/Login/login",array(),5,'Sila log masuk. ') akan dilaksanakan ;
<?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; } } } ?>
(3) Tulis kaedah log masuk. Kaedah ujian di atas akan menyimpan sesi selepas melompat ke kaedah log masuk, dan kemudian pergi ke kaedah ujian dan panjang rentetan akan muncul Disebabkan nilai sesi, kaedah ujian akan terus dilaksanakan.
Pembelajaran yang disyorkan: "
Tutorial Video PHP<?php namespace HomeController; use ThinkController; class LoginController extends Controller { public function login() { session("uid","zhangsan");//存一个session值 } } ?>"
Atas ialah kandungan terperinci Adakah anda menggunakan kaedah ajax dalam thinkphp?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!