jsonp實(shí)現(xiàn)跨域問(wèn)題

jsonp的具體實(shí)現(xiàn)

1.創(chuàng)建一個(gè)exress項(xiàng)目州藕,并安裝jquery的依賴(lài),在項(xiàng)目中創(chuàng)建兩個(gè)服務(wù)器端的js文件床玻,使它們監(jiān)聽(tīng)不同的端口號(hào),這樣保證了它們的域名不同锈死。

//server1.js
const express = require('express');
const app = express();

app.use(express.static('./'));

var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);
});
//server2.js
const express = require('express');
const app = express();

app.get('/json-data',function (req,res) {
    res.json({name:'liyan'});
});

var server = app.listen(8000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);
});

2.添加json.html文件,我想讓json.html文件訪問(wèn)http://localhost:8000/json-data發(fā)送的數(shù)據(jù)其屏,我使用ajax發(fā)送請(qǐng)求缨该,代碼如下:

<html>
<head>
    <script src="./node_modules/jquery/dist/jquery.js"></script>
    <script type="text/javascript">
        function loadData() {
            $.get('http://localhost:8000/json-data', function (data) {
                $('#data').text(data);
            });
        }
    </script>
</head>
<body>
<div>
    <button onclick="loadData()">please click me gain client data</button>
</div>
<div id="data"></div>
</body>
</html>

現(xiàn)在我啟動(dòng)服務(wù)器偎行,去訪問(wèn)http://localhost:3000/json.html压彭,但是我獲取不到我想要的數(shù)據(jù),出現(xiàn)了如下的錯(cuò)誤:

錯(cuò)誤提示

錯(cuò)誤提示的意思是:不能請(qǐng)求http://localhost:8000/json-data下的資源壮不,應(yīng)為請(qǐng)求資源上不存在“訪問(wèn)控制允許源”的標(biāo)頭,因此不允許訪問(wèn)询一。

3.使用jsonp進(jìn)行跨域訪問(wèn)

Web頁(yè)面上調(diào)用js文件時(shí)是不受跨域的影響癌椿,如果想通過(guò)純web端跨域訪問(wèn)數(shù)據(jù)就只有一種可能菱阵,那就是在遠(yuǎn)程服務(wù)器上設(shè)法把數(shù)據(jù)裝進(jìn)js格式的文件里踢俄,供客戶端調(diào)用和進(jìn)一步處理晴及;JSON的純字符數(shù)據(jù)格式可以簡(jiǎn)潔的描述復(fù)雜數(shù)據(jù),更妙的是JSON還被js原生支持虑稼,所以在客戶端幾乎可以隨心所欲的處理這種格式的數(shù)據(jù)。

根據(jù)以上的原理蛛倦,web客戶端通過(guò)與調(diào)用腳本一模一樣的方式,來(lái)調(diào)用跨域服務(wù)器上動(dòng)態(tài)生成的js格式文件(一般以JSON為后綴)溯壶,顯而易見(jiàn),服務(wù)器之所以要?jiǎng)討B(tài)生成JSON文件且改,目的就在于把客戶端需要的數(shù)據(jù)裝入進(jìn)去〖嘏埃客戶端在對(duì)JSON文件調(diào)用成功之后,也就獲得了自己所需的數(shù)據(jù)效扫,剩下的就是按照自己需求進(jìn)行處理和展現(xiàn)了。

于是菌仁,我在server2.js的文件里添加如下的代碼:

app.get('/jsonp-data',function (req,res) {
    res.jsonp({name:'liyan'});
});

使用jsonp發(fā)現(xiàn)我想要的數(shù)據(jù),現(xiàn)在济丘,我需要在客戶端接受數(shù)據(jù),并對(duì)他進(jìn)行處理摹迷,修改json.html文件的代碼,如下所示:

function loadData() {
            $.get({
                url:'http://localhost:8000/jsonp-data',
                dataType:'jsonp',
                success:function (data) {
                    $('#data').text(JSON.stringify(data))
                }
            })
        }

4.重新啟動(dòng)兩個(gè)服務(wù)器峡碉,現(xiàn)在我訪問(wèn)http://localhost:3000/json.html點(diǎn)擊按鈕就可以獲得http://localhost:8000/jsonp-data的資源了。

跨域成功

至此吉执,jsonp解決跨域的簡(jiǎn)單例子就完成了疯淫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戳玫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咕宿,更是在濱河造成了極大的恐慌,老刑警劉巖荠列,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件载城,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诉瓦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)固额,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人斗躏,你說(shuō)我怎么就攤上這事∽牟冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵隧饼,是天一觀的道長(zhǎng)静陈。 經(jīng)常有香客問(wèn)我燕雁,道長(zhǎng)鲸拥,這世上最難降的妖魔是什么拐格? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任刑赶,我火速辦了婚禮,結(jié)果婚禮上角撞,老公的妹妹穿的比我還像新娘勃痴。我一直安慰自己,他們只是感情好沛申,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布姐军。 她就那樣靜靜地躺著铁材,像睡著了一般奕锌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惊暴,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音辽话,去河邊找鬼。 笑死油啤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的益咬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼梅鹦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了帘瞭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒿讥,失蹤者是張志新(化名)和其女友劉穎蝶念,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芋绸,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媒殉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摔敛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廷蓉。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖马昙,靈堂內(nèi)的尸體忽然破棺而出桃犬,到底是詐尸還是另有隱情刹悴,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布攒暇,位于F島的核電站土匀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏形用。R本人自食惡果不足惜就轧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望田度。 院中可真熱鬧妒御,春花似錦、人聲如沸镇饺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梦鉴。三九已至,卻和暖如春揭保,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魄宏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工秸侣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宠互。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓味榛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親予跌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搏色,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 0. 前言 說(shuō)到AJAX就會(huì)不可避免的面臨兩個(gè)問(wèn)題。 AJAX以何種格式來(lái)交換數(shù)據(jù)券册? 第二個(gè)是跨域的需求如何解決频轿?...
    公子七閱讀 23,601評(píng)論 7 67
  • http://blog.csdn.net/qq_34482827/article/details/51655914...
    cllian119閱讀 1,043評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)烁焙,斷路器航邢,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 恍惚 放大 嬉戲后設(shè)前境劃船返回還是蝴蝶的那一天雙重看見(jiàn)在鼓中生活的十一年宇宙中不承認(rèn)字跡的翩躚那么就回到老去布面...
    言瞿閱讀 188評(píng)論 0 1
  • 走走停停 聽(tīng)它們要告訴我什么 一棵樹(shù) 萌芽時(shí) 會(huì)喊 痛 一叢花 卻笑得歡 一棵草 時(shí)常是沉重的 一片綠的時(shí)候 它們...
    我這里的安靜的日子閱讀 343評(píng)論 0 2