PHP如何解決跨域問題
客戶端域名和請求數(shù)據(jù)的域名不一致時(shí),直接使用ajax訪問就會(huì)報(bào)錯(cuò)Access-Control-Allow-Origin。一般前端解決的話會(huì)使用jsonp或者cors等手段鉆空子,下面我給你介紹下php簡單粗暴的解決方法。
問題描述
客戶端域名和請求數(shù)據(jù)的域名不一致時(shí),直接使用ajax訪問就會(huì)報(bào)錯(cuò) No ‘Access-Control-Allow-Origin’ allowed access.
<script type="text/javascript">
var dataArr=[]
$.ajax({
type: "GET",
url: "http://www.tjdsmy.cn/service/common/obtain",
success: function(data){
var allData = JSON.parse(data.location);
}
});
</script>
解決跨域
一般前端解決的話會(huì)使用 jsonp 或者 cors 等鉆空子進(jìn)行跨域,其實(shí)php只需加上一段代碼就可以跨域了。前端代碼不需要任何修改,而且post方式get方式都管用。
/*
獲取位置
*/
public function obtain()
{
// 制定允許其他域名訪問
header("Access-Control-Allow-Origin:*");
// 響應(yīng)類型
header('Access-Control-Allow-Methods:POST');
// 響應(yīng)頭設(shè)置
header('Access-Control-Allow-Headers:x-requested-with, content-type');
return json_encode(['status' => 1, 'location' => $data);
}
原因分析:
如果瀏覽器請求包括Access-Control-Request-Headers字段,則Access-Control-Allow-Headers字段是必需的。它也是一個(gè)逗號分隔的字符串,表明服務(wù)器支持的所有頭信息字段,不限于瀏覽器在”預(yù)檢”中請求的字段。
問題分析
然后看了請求頭中確實(shí)包括Access-Control-Request-Headers,然后成功返回接口信息。