# 快速入門(十五):頁面請求和AJAX
本章內容描述了如何判斷頁面請求類型和AJAX數據返回。
## 判斷請求類型
在很多情況下面,我們需要判斷當前操作的請求類型是GET 、POST 、PUT或 DELETE,一方面可以針對請求類型作出不同的邏輯處理,另外一方面有些情況下面需要驗證安全性,過濾不安全的請求。
系統內置了一些常量用于判斷請求類型,包括:
| 常量 | 說明 |
| --- | --- |
| IS_GET | 判斷是否是GET方式提交 |
| IS_POST | 判斷是否是POST方式提交 |
| IS_PUT | 判斷是否是PUT方式提交 |
| IS_DELETE | 判斷是否是DELETE方式提交 |
| IS_AJAX | 判斷是否是AJAX提交 |
| REQUEST_METHOD | 當前提交類型 |
使用舉例如下:
~~~
class UserController extends Controller{
public function update(){
if (IS_POST){
$User = M('User');
$User->create();
$User->save();
$this->success('保存完成');
}else{
$this->error('非法請求');
}
}
}
~~~
> 個別情況下判斷AJAX請求的時候,你可能需要在表單里面添加一個隱藏域,告訴后臺屬于ajax方式提交,默認的隱藏域名稱是ajax(可以通過VAR_AJAX_SUBMIT配置),如果是JQUERY類庫的話,則無需添加任何隱藏域即可自動判斷。
## AJAX返回
ThinkPHP可以很好的支持AJAX請求,系統的`\Think\Controller`類提供了`ajaxReturn`方法用于AJAX調用后返回數據給客戶端。并且支持`JSON`、`JSONP`、`XML`和`EVAL`四種方式給客戶端接受數據,并且支持配置其他方式的數據格式返回。
ajaxReturn方法調用示例:
~~~
$data = 'ok';
$this->ajaxReturn($data);
~~~
支持返回數組數據:
~~~
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data);
~~~
默認配置采用JSON格式返回數據(通過配置**DEFAULT_AJAX_RETURN**進行設置),我們可以指定格式返回,例如:
~~~
// 指定XML格式返回數據
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data,'xml');
~~~
返回數據data可以支持字符串、數字和數組、對象,返回客戶端的時候根據不同的返回格式進行編碼后傳輸。如果是JSON/JSONP格式,會自動編碼成JSON字符串,如果是XML方式,會自動編碼成XML字符串,如果是EVAL方式的話,只會輸出字符串data數據。
> JSON和JSONP雖然只有一個字母的差別,但其實他們根本不是一回事兒:JSON是一種數據交換格式,而JSONP是一種非官方跨域數據交互協議。一個是描述信息的格式,一個是信息傳遞的約定方法。
默認的JSONP格式返回的處理方法是`jsonpReturn`,如果你采用不同的方法,可以設置:
~~~
'DEFAULT_JSONP_HANDLER' => 'myJsonpReturn', // 默認JSONP格式返回的處理方法
~~~
或者直接在頁面中用callback參數來指定。