ホームページ > 記事 > PHPフレームワーク > thinkphpでajaxメソッドを使用していますか?
ajax メソッドは thinkphp で使用されます。thinkphp は、PHP が ajax を使用するのと同じ方法で ajax を使用します。違いは、PHP の ajax の URL はページを指すのに対し、thinkphp の URL はページを指す必要があることです。 Ajax で使用できる操作メソッド。指定されたデータを返したり、データ型の変更を返したりします。
この記事の動作環境: Windows 10 システム、ThinkPHP バージョン 5、Dell G3 コンピューター。
thinkphp で ajax メソッドを使用します
thinkphp は以前と同じ方法で ajax を使用します。違いは次のとおりです。その前 ajax の URL はページを指しますが、thinkphp の URL は操作メソッドを指す必要があります。
1. thinkphp は ajax を使用してデータを返します
1. まず、AdminControllerMainController.class.php
public function testajax()//ajax测试方法 { $this->show(); }
2 にメソッドを記述します。対応する表示ページ 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
public function ajaxchuli() { $n = D("Nation");//造一个nation表的模型对象 $attr = $n->select(); $this->ajaxReturn($attr);//ajax返回数据的方式,用ajaxReturn。 }
4 に ajax 処理メソッドを記述する これでページ上にデータが表示されます
2. ajax の戻りデータ型の変更
thinkphp では、ajax はデフォルトで JSON データを返しますが、これは DEFAULT_AJAX_RETURN を設定することで設定できます。
// 指定XML格式返回数据 $data['status'] = 1; $data['content'] = 'content'; $this->ajaxReturn($data,'xml');
XML モードの場合は自動的に XML 文字列にエンコードされ、EVAL モードの場合は文字列データのみが出力されます。
例:
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>
3 に変更する必要もあります。ajax を使用して (自動コレクションフォーム) を使用してデータベースにデータを送信します データを追加します
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“。 } }
4. 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) 名前空間 Homelibs; および名前空間。
(4) Page.class.php ファイル $this->limit = "LIMIT ".$this->setLimit(); の 57 行目を変更し、"LIMIT ".
5. 出力文字列の長さ
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 にカプセル化されたメソッド function.php を記述します。内容は次のとおりです
<?php function ChangDu($str) { return strlen($str); } ?>
(3) これを書いた後、ブラウザに http://localhost/thinkphp/index.php/Home/Main/test と入力しても文字列の長さが読み取れないので追加する必要があります。前のコード:
"LOAD_EXT_FILE"=>"functions",//関数ライブラリ クラスを自動的にロードします
文字列の長さはこれ以降でのみ読み取ることができますコード。
6. セッションが存在するかどうかを自動的に判断します
1. セッションの目的
(1) ユーザー名およびその他の情報を保存するために使用されます。
## (2) ログインのスキップを防ぐ; 2. 前の方法に従う場合は、各ページまたはメソッドでセッションが存在するかどうかを確認する必要があります。 (1) Fucontroller クラスを作成して、セッションが存在するかどうかを確認します。<?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) テスト メソッドを作成します。継承された親クラスは、Controller ではなく FuController であることに注意してください。初めてこのページにアクセスしたときは、ログインメソッドにジャンプしますが、セッション値がないため、上記 $this->redirect("Home/Login/login",array(),5,'ログインしてください; (3) ログインメソッドを記述します。上記のテスト メソッドは、ログイン メソッドにジャンプした後にセッションを保存し、テスト メソッドに移動すると文字列の長さが表示されます。セッション値のため、テスト メソッドは実行を継続します。
<?php namespace HomeController; use ThinkController; class LoginController extends Controller { public function login() { session("uid","zhangsan");//存一个session值 } } ?>推奨学習: 「
PHP ビデオ チュートリアル 」
以上がthinkphpでajaxメソッドを使用していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。