tp ajax請求跨域解決方法

跨域是瀏覽器出於安全的同源策略,簡單來說:瀏覽器從一個域名的網頁去請求另一個域名的資源時,域名、端口、協議任一不同,都是屬於跨域。

跨域的解決方法有很多種,這裏只介紹ThinkPHP的解決方法。

核心語句:

// 返回JSON數據格式到客戶端 包含狀態信息
header('Content-Type:application/json; charset=utf-8');
// 允許訪問源
header('Access-Control-Allow-Origin:*'); 
// 允許訪問的有效期
header('Access-Control-Max-Age:86400'); 
// 允許訪問的方法
header('Access-Control-Allow-Methods:OPTIONS, GET, POST, DELETE');

一開始我想到的是直接放在每個方法的下面,如下

public function login(){
    header('Content-Type:application/json; charset=utf-8');
    header('Access-Control-Allow-Origin:*'); 
    header('Access-Control-Max-Age:86400'); 
    header('Access-Control-Allow-Methods:OPTIONS, GET, POST, DELETE');
}

雖然可以成功的解決跨域的問題,但是每寫一個方法都需要重新寫這四條語句,就會比較麻煩。

那麼我們的控制器一般都是直接繼承Controller,那麼我們就定義一個BaseController,

class BaseController extends Controller{
    public function _initialize(){
        //處理跨域問題
        header('Content-Type:application/json; charset=utf-8');
        header('Access-Control-Allow-Origin:*'); 
        header('Access-Control-Max-Age:86400'); // 允許訪問的有效期
        header('Access-Control-Allow-Headers:*'); 
        header('Access-Control-Allow-Methods:OPTIONS, GET, POST, DELETE');
    }
}

然後把我們的接口全部繼承BaseController即可

好了,這樣就可以一勞永逸了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章