跨域問題來源於瀏覽器的同源策略,協議+主機名+端口號 相同,則允許相互訪問。也就是說JavaScript只能訪問和操作自己域下的資源,不能訪問和操作其他域下的資源。
示例:
$.ajax({
url: "http://baidu.com",
data: {},
success: function (data) {
console.log("請求成功:", data);
},
error: function (e) {
console.log("請求失敗:", e);
}
});
結果:
解決方法 :
1 、 CORS
,只需在請求的服務器中添加請求頭信息如下:
public function ajax()
{
header('Access-Control-Allow-Origin: *');
// ...
return "ok";
}
2 、JSONP
前端請求設置回調函數名:
$.ajax({
url: "http://test.com",
data: {},
dataType:"jsonp",
jsonpCallback:"callback_name",
success: function (data) {
console.log("請求成功:", data);
},
error: function (e) {
console.log("請求失敗:", e);
}
});
後端接收回調函數,並拼接數據返回:
public function index()
{
$call_back = $_GET["callback_name"];
return $call_back . '( ok )';
}
JSONP 方式只支持 GET 方式跨域請求;
3、代理
代理方式是通過向同域服務器請求接口,在同域服務器請求其它服務器的數據再返回;