JS之跨域

今天學了跨域覆致,迫不及待想跟大家分享侄旬!不妥之處希望大家指正。
首先來明確一下“跨域”這個概念煌妈。
跨域指的是儡羔,到外域去取數(shù)據(jù)。那什么是“外域”呢声旺?我們先來了解同域笔链。同域指的是,同協(xié)議腮猖、同域名鉴扫、同端口。如果兩個URL澈缺,協(xié)議相同坪创,域名相同,端口號相同姐赡,那么這兩個URL就屬于同域莱预。那么外域就是,協(xié)議不同项滑,或者域名不同依沮,或者端口號不同。注意枪狂,這三者只要其中一個不同危喉,就不屬于同域。
我們看看例子:

http://www.reibang.com/a.html
http://www.reibang.com/b.html
//同域州疾。協(xié)議相同辜限,域名相同,端口號相同(默認80端口)
http://a.jianshu.com
http://b.jianshu.com
//不同域严蓖。域名不同
http://www.reibang.com
http://www.reibang.com
//不同域薄嫡。協(xié)議不同

舉例完畢,接下來將會講講以下三種跨域的方式颗胡。

  1. CORS
  2. 降域
  3. JSONP

CORS

CORS全稱是跨域資源共享(Cross-Origin Resource Sharing)毫深,是一種Ajax跨域請求資源的方式。實現(xiàn)方式很簡單杭措,當你使用XMLHttpRequest發(fā)送請求時费什,如果該請求不符合同源策略,瀏覽器會給該請求加一個請求頭:Origin手素,而后臺會在返回結(jié)果中加一個響應頭:Access-Control-Allow-Origin,瀏覽器判斷該響應頭是否包含Origin的值鸳址,如果包含,瀏覽器就會處理響應泉懦,我們就可以拿到數(shù)據(jù)稿黍;如果不包含,瀏覽器就會直接駁回崩哩,我們就拿不到數(shù)據(jù)巡球。
那么怎么做才能讓我們跨域拿到數(shù)據(jù)呢?很簡單邓嘹,我們只需在遠程文件中加上這一行代碼:

header("Access-Control-Allow-Origin","允許請求的URL酣栈,*為允許全部")

比如,header("Access-Control-Allow-Origin","http://www.reibang.com")會允許來自 http://www.reibang.com 的請求汹押,而header("Access-Control-Allow-Origin","*")會允來自任何域的請求矿筝。

降域

如果我們從 a.jianshu.com 請求 b.jianshu.com 的數(shù)據(jù),像這種子頁面不相同的情況就是適合利用降域來跨域了棚贾。實現(xiàn)起來也很簡單窖维,只需在本地文件和遠程文件都加上這句代碼:

document.domain="jianshu.com"

也就是說,直接把主網(wǎng)頁的域名寫上就可以了,這樣就實現(xiàn)了利用降域來跨域妙痹。

JSONP

好了铸史,重點來了,JSONP是非常常用的跨域方法怯伊,它通過動態(tài)創(chuàng)建script標簽來實現(xiàn)跨域琳轿。
眾所周知,通過script來加載外部文件是不存在同源策略的限制的耿芹,我們可以請求任何域的文件而不需要跨域崭篡。確切的說,任何含有src或者href屬性的標簽都不存在同源策略的限制猩系。利用這個特點媚送,我們把遠程文件的URL放到script標簽的src中,這樣就得到了遠程文件中的數(shù)據(jù)寇甸,然后把這些數(shù)據(jù)作為參數(shù)傳入一個函數(shù)塘偎,就可以按自己需求處理和呈現(xiàn)了。我們看看具體怎么實現(xiàn):

//遠程數(shù)據(jù)地址
var url="http://api.jirengu.com/fm/getSong.php?callback=handler";
//創(chuàng)建script標簽
var script=document.createElement('script');
//把script標簽src設為遠程數(shù)據(jù)地址
script.setAttribute('src',url);
//把script標簽加到head中
document.getElementsByTagName('head')[0].appendChild(script);
//回調(diào)處理函數(shù)
function handler(data){
    //some code here... 
}

注意拿霉,要在遠程數(shù)據(jù)地址尾部加上回調(diào)函數(shù)名吟秩, 服務器會動態(tài)用這個函數(shù)名包裹住數(shù)據(jù),也就是將數(shù)據(jù)作為這個函數(shù)的參數(shù)绽淘,這樣返回到本地之后就可以執(zhí)行相應函數(shù)了涵防。
舉個栗子,當我們以callback為getCity請求數(shù)據(jù)沪铭,服務器返回了的數(shù)據(jù)是這樣的:

getCity(
{"city":
[
    {   
        "name":"廣州",
    "cid":"578"
    },
        {
        "name":"廈門",
        "cid":"586"
        }
]
}
)

我們的getCity函數(shù)是這樣的:

function getCity(data){
    console.log(data.city[0].name);
}

這樣我們就log出了廣州壮池,跨域成功偏瓤!是不是很簡單啊椰憋!
好了厅克,跨域就講這么多。歡迎交流橙依,歡迎指正证舟!
原創(chuàng)文章,轉(zhuǎn)載請注明出處窗骑!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末女责,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子创译,更是在濱河造成了極大的恐慌抵知,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔榴,死亡現(xiàn)場離奇詭異辛藻,居然都是意外死亡,警方通過查閱死者的電腦和手機互订,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門吱肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仰禽,你說我怎么就攤上這事氮墨。” “怎么了吐葵?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵规揪,是天一觀的道長。 經(jīng)常有香客問我温峭,道長猛铅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任凤藏,我火速辦了婚禮奸忽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揖庄。我一直安慰自己栗菜,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布蹄梢。 她就那樣靜靜地躺著疙筹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上而咆,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天霍比,我揣著相機與錄音,去河邊找鬼翘盖。 笑死桂塞,一個胖子當著我的面吹牛凹蜂,可吹牛的內(nèi)容都是我干的馍驯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玛痊,長吁一口氣:“原來是場噩夢啊……” “哼汰瘫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起擂煞,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤混弥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后对省,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝗拿,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年蒿涎,在試婚紗的時候發(fā)現(xiàn)自己被綠了哀托。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡劳秋,死狀恐怖仓手,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玻淑,我是刑警寧澤嗽冒,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站补履,受9級特大地震影響添坊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箫锤,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一贬蛙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧麻汰,春花似錦速客、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春浪耘,著一層夾襖步出監(jiān)牢的瞬間乱灵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工七冲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痛倚,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓澜躺,卻偏偏與公主長得像蝉稳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掘鄙,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 瀏覽器在請求不同域的資源時操漠,會因為同源策略的影響請求不成功收津,這就是通常被提到的“跨域問題”。作為前端開發(fā)浊伙,解決跨域...
    SCQ000閱讀 2,554評論 1 52
  • 一撞秋、瀏覽器的同源策略 1.什么是同源? 所謂“同源”指的是”三個相同“嚣鄙。相同的域名吻贿、端口和協(xié)議,這三個相同的話就視...
    徐國軍_plus閱讀 843評論 1 3
  • 前段時間學習了AJAX拗慨,已經(jīng)可以從后臺拿到JSON串廓八。可是出現(xiàn)了問題赵抢,目前我發(fā)送的請求都是在同域下的請求剧蹂,如果我想...
    大春春閱讀 1,055評論 2 13
  • 古塞分明日,涼州早晚涼烦却。 午間蒸暑氣宠叼,夜半冷蟾光。 打小已習慣其爵,老來仍不妨冒冬。 自然好時節(jié),生就美山鄉(xiāng)摩渺。
    雪窗_武立之閱讀 233評論 0 2
  • 我覺得我的心理構(gòu)造比較詭異摇幻。當我在一堆普通的親戚同學之間時横侦,看上去絕對是一個內(nèi)向的人挥萌。可是枉侧,我在特親的人面前...
    煙小籽閱讀 171評論 0 1