在頁面用ajax把數據傳過來,在後臺獲取參數,而後返回想要返回的數據便可。javascript
傳遞過來的參數鍵前加了下劃線_php
http://localhost/index?_ajax=1
html
thinkphp5不支持ajax麼?3.2.3都有ajaxReturn()方法,5.0就沒有了?仍是改爲什麼方式了?在thinkphp5怎麼用ajax?前端
return json($arr);java
Tp5的ajax是自動識別的ajax
我也是第一次用,看了下文檔,已經改了,
能夠直接在控制器裏面用json($arrData)便可thinkphp
AJAX/PJAX
假裝能夠對請求進行AJAX
請求假裝,以下:數據庫
http://localhost/index?_ajax=1
或者PJAX
請求假裝json
http://localhost/index?_pjax=1
若是你須要改變假裝請求的變量名,能夠修改應用配置文件:後端
// 表單ajax假裝變量 'var_ajax' => '_a', // 表單pjax假裝變量 'var_pjax' => '_p',
_ajax
和_pjax
能夠經過GET/POST/PUT
等請求變量假裝。
控制器通常不須要任何輸出,直接return便可。
默認狀況下,控制器的返回輸出不會作任何的數據處理,但能夠設置輸出格式,並進行自動的數據轉換處理,前提是控制器的輸出數據必須採用return
的方式返回。
若是控制器定義爲:
namespace app\index\controller; class Index { public function hello() { return 'hello,world!'; } public function data() { return ['name'=>'thinkphp','status'=>1]; } }
當咱們設置輸出數據格式爲JSON:
// 默認輸出類型 'default_return_type' => 'json',
咱們訪問
http://localhost/index.php/index/Index/hello http://localhost/index.php/index/Index/data
輸出的結果變成:
"hello,world!" {"name":"thinkphp","status":1}
默認狀況下,控制器在ajax請求會對返回類型自動轉換,默認爲json
若是咱們控制器定義
namespace app\index\controller; class Index { public function data() { return ['name'=>'thinkphp','status'=>1]; } }
咱們訪問
http://localhost/index.php/index/Index/data
輸出的結果變成:
{"name":"thinkphp","status":1}
當咱們設置輸出數據格式爲html:
// 默認輸出類型 'default_ajax_return' => 'html',
這種狀況下ajax請求不會對返回內容進行轉換
error方法會自動判斷當前請求是否屬於Ajax
請求,若是屬於Ajax
請求則會自動轉換爲default_ajax_return
配置的格式返回信息。 success在Ajax
請求下不返回信息,須要開發者自行處理。
前一篇講到thinkphp5從數據庫獲取數據以後賦給視圖view,前一篇從數據渲染方式來講是服務端數據渲染,這一章則是瀏覽器端數據渲染。按照知識總結依據來劃分,這是兩種不一樣的技術場景。
下面介紹具體的ajax接口實現代碼。
首先是html代碼部分,個人訪問地址爲:http://app.write.com/thinkphp/public/index.php/index/index/api,這裏沒有省略入口文件,同時我本地的域名是app.write.com,tp5框架在thinkphp文件裏面。這裏採用原生ajax,沒有作ie瀏覽器的兼容性,代碼以下
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>ajax調用接口</title> 7 </head> 8 9 <body> 10 11111 11 <div id="test"> 12 13 </div> 14 <script type="text/javascript"> 15 var oAjax = new XMLHttpRequest(); 16 oAjax.open('GET',"/thinkphp/public/index.php/index/index/apiapi?name=1"); 17 oAjax.onreadystatechange = function() { 18 if (oAjax.readyState == 4) { 19 if (oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) { 20 console.log(oAjax.responseText); 21 var data=JSON.parse(oAjax.responseText); 22 document.getElementById("test").innerHTML=data.sex; 23 } else { 24 console.log(oAjax.status); 25 } 26 } 27 }; 28 oAjax.send(); 29 </script> 30 </body> 31 32 </html>
對上述代碼作一下解釋,算是一個小知識點:通常來講能夠將http狀態代碼爲200做爲成功的標誌,此時responseText的屬性的內容已經就緒。此外狀態304表示請求的資源並無被修改,能夠直接使用瀏覽器中緩存的版本。
至於爲啥是大於200是出於兼容性的考慮,有的瀏覽器會報告204。
後端代碼以下,後端代碼是同一個模塊index下的同一個控制器下index的apiapi方法。
1 <?php 2 namespace app\index\controller; 3 //use think\Db; 4 use think\Controller; 5 class Index extends Controller 6 { 7 8 public function apiapi(){ 9 $name=$this->request->param(); 10 return json_encode($name); 11 ///return "common"; 12 } 13 14 public function api(){ 15 16 return view(); 17 ///return "common"; 18 } 19 }
代碼首先獲取ajax獲取的參數,以後返回到前端。
本文結束。