關(guān)于跨域請(qǐng)求
在這個(gè)api橫行的時(shí)代, 以及用戶(hù)體驗(yàn)為王的時(shí)代, 跨域請(qǐng)求是有發(fā)生, 經(jīng)常用到的有兩種情況:
一. 服務(wù)端設(shè)置 header
頭允許跨域
代碼如下:
// 允許 fizzday.net 發(fā)起的跨域請(qǐng)求
header("Access-Control-Allow-Origin: fizzday.net");
//如果需要設(shè)置允許所有域名發(fā)起的跨域請(qǐng)求,可以使用通配符 *
header("Access-Control-Allow-Origin: *");
二. jsonp跨域
有些網(wǎng)站處于安全考慮, 不會(huì)設(shè)置允許跨域, 而我們又剛好會(huì)用到一次跨域請(qǐng)求, 那么, jsonp就派上用場(chǎng)了:
<?php
// 設(shè)定js定義的方法 (如: js的 user() 方法)
$jsonp = 'user';
// 需要獲取的數(shù)據(jù)
$data = array('id'=>1, 'name'=>'fizz');
// 轉(zhuǎn)換為json
$dataToJson = json_encode($data);
// 輸出
echo $jsonp.'('.$dataToJson.')';
我們來(lái)看一下輸出結(jié)果
'user({'id': 1, 'name': 'fizz'})'
貌似挺平常的, 看不出來(lái)什么, 我們把它格式化一下
user ({
'id': 1,
'name': 'fizz'
})
你看到了什么??? 沒(méi)錯(cuò), 這是一個(gè)標(biāo)準(zhǔn)的 js 函數(shù), 于是乎, 我們只需要定義一個(gè)json函數(shù)就可以了:
<script type="text/javascript">
function user(re)
{
var name = re.name
}
</script>
是不是很爽, 我們只需要在 ajax
請(qǐng)求對(duì)應(yīng)的php的api連接地址就可以了, 然后一次處理數(shù)據(jù), 完事ok!!!
可是, 這也意味著不安全, 所以, 我們還是要根據(jù)實(shí)際情況, 選擇適合的使用