解決安全性問題,主要涉及兩點:javascript
(1) 先後端約定jsonp請求的js的回調函數名前端
(2) 服務器端指定返回的數據格式爲jsonjava
(3) 進行referrer驗證 ($_SERVER['HTTP_REFERER'] 中的 host,是否在白名單內)ajax
如下是事例代碼:json
1. 前端js發起ajax跨域jsonp請求:後端
$.ajax({ type: "GET", url: "http://xxx.com/getData", dataType: "jsonp", jsonp: "callbackParam", //自定義callback參數名稱,可將默認的參數名稱callback自定義成myCallback等其餘名稱 jsonpCallback:"getData", //自定義callback的js函數名 success: function(data) { ... } });
2. 服務器端返回數據:跨域
public function getData(){ //指定返回的數據格式,以便於可執行js函數 header("Content-type: application/javascript"); $callback = $this->_param('callbackParam'); //約定只接受某個js回調函數名 if($callback != 'getData') { $callback = 'getData'; } $data = array(...); echo $callback.'('.json_encode($data).')'; exit; }