# 快速入門(十五):頁面請求和AJAX
本章內(nèi)容描述了如何判斷頁面請求類型和AJAX數(shù)據(jù)返回。
## 判斷請求類型
在很多情況下面,我們需要判斷當(dāng)前操作的請求類型是GET 、POST 、PUT或 DELETE,一方面可以針對請求類型作出不同的邏輯處理,另外一方面有些情況下面需要驗證安全性,過濾不安全的請求。
系統(tǒng)內(nèi)置了一些常量用于判斷請求類型,包括:
| 常量 | 說明 |
| --- | --- |
| IS_GET | 判斷是否是GET方式提交 |
| IS_POST | 判斷是否是POST方式提交 |
| IS_PUT | 判斷是否是PUT方式提交 |
| IS_DELETE | 判斷是否是DELETE方式提交 |
| IS_AJAX | 判斷是否是AJAX提交 |
| REQUEST_METHOD | 當(dāng)前提交類型 |
使用舉例如下:
~~~
class UserController extends Controller{
public function update(){
if (IS_POST){
$User = M('User');
$User->create();
$User->save();
$this->success('保存完成');
}else{
$this->error('非法請求');
}
}
}
~~~
> 個別情況下判斷AJAX請求的時候,你可能需要在表單里面添加一個隱藏域,告訴后臺屬于ajax方式提交,默認(rèn)的隱藏域名稱是ajax(可以通過VAR_AJAX_SUBMIT配置),如果是JQUERY類庫的話,則無需添加任何隱藏域即可自動判斷。
## AJAX返回
ThinkPHP可以很好的支持AJAX請求,系統(tǒng)的`\Think\Controller`類提供了`ajaxReturn`方法用于AJAX調(diào)用后返回數(shù)據(jù)給客戶端。并且支持`JSON`、`JSONP`、`XML`和`EVAL`四種方式給客戶端接受數(shù)據(jù),并且支持配置其他方式的數(shù)據(jù)格式返回。
ajaxReturn方法調(diào)用示例:
~~~
$data = 'ok';
$this->ajaxReturn($data);
~~~
支持返回數(shù)組數(shù)據(jù):
~~~
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data);
~~~
默認(rèn)配置采用JSON格式返回數(shù)據(jù)(通過配置**DEFAULT_AJAX_RETURN**進(jìn)行設(shè)置),我們可以指定格式返回,例如:
~~~
// 指定XML格式返回數(shù)據(jù)
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data,'xml');
~~~
返回數(shù)據(jù)data可以支持字符串、數(shù)字和數(shù)組、對象,返回客戶端的時候根據(jù)不同的返回格式進(jìn)行編碼后傳輸。如果是JSON/JSONP格式,會自動編碼成JSON字符串,如果是XML方式,會自動編碼成XML字符串,如果是EVAL方式的話,只會輸出字符串data數(shù)據(jù)。
> JSON和JSONP雖然只有一個字母的差別,但其實他們根本不是一回事兒:JSON是一種數(shù)據(jù)交換格式,而JSONP是一種非官方跨域數(shù)據(jù)交互協(xié)議。一個是描述信息的格式,一個是信息傳遞的約定方法。
默認(rèn)的JSONP格式返回的處理方法是`jsonpReturn`,如果你采用不同的方法,可以設(shè)置:
~~~
'DEFAULT_JSONP_HANDLER' => 'myJsonpReturn', // 默認(rèn)JSONP格式返回的處理方法
~~~
或者直接在頁面中用callback參數(shù)來指定。
- 快速入門 1:基礎(chǔ)
- 快速入門 2:CURD
- 快速入門 3:查詢語言
- 快速入門 4:連貫操作
- 快速入門 5:變量
- 快速入門 6:路由
- 快速入門 7:視圖
- 快速入門 8:變量輸出
- 快速入門 9:循環(huán)和控制輸出
- 快速入門 10:公共模板和模板布局
- 快速入門 11:Action參數(shù)綁定
- 快速入門 12:空操作和空控制器
- 快速入門 13:初始化、前置和后置操作
- 快速入門 14:頁面跳轉(zhuǎn)和重定向
- 快速入門 15:頁面請求和AJAX
- 快速入門 16:偽靜態(tài)
- 快速入門 17:操作綁定到類
- 快速入門 18:多層控制器
- 快速入門 19:自動驗證
- 快速入門 20:自動完成
