理解JSONP 下

理解JSONP 上

跨域SRJ

如果我訪問其他網(wǎng)站的服務(wù)器回窘,可以嗎贱案?
由于JSONP可以規(guī)避同源策略抛猖,因此可以

下面我們自己做兩個網(wǎng)站嘗試一下
請求方:ada.com (瀏覽器)
響應(yīng)方:jack.com (服務(wù)器)

Linux 或 mac直接

vi /etc/hosts

windows需要找到/etc/hosts文件 比較難找,推薦Everything

在hosts文件下編輯兩個網(wǎng)站
打開兩個 node 服務(wù)器

將script.src改成后端服務(wù)器的jack.com

script.src = 'http://jack.com:8002/pay'

成功在 ada.com里接收到j(luò)ack.com,ada.com 的前端程序員成功向jack.com 的后端程序員發(fā)起請求并得到響應(yīng)

跨域SRJ成功

代碼分離:

耦合解耦

上面的amount.innerText=amount.innerText-1就是前端頁面的代碼榄鉴,這說明jack.com 的后端程序元需要對ada.com的頁面細(xì)節(jié)了解的很清楚,這種情況叫做耦合
那我們讓前后端分離唄蛉抓,即解耦
后端改成

//獲取參數(shù).call(this庆尘,成功)
response.write(`${query.callbackName}.call(undefined,'success')`)

前端給參

//callbackName = 隨便
script.src = 'http://jack.com:8002/pay?callbackName=yyy'

JSONP:

上面代碼高亮的部分就是JSON(一個鍵必須是雙引號的對象)
JSON左邊的代碼就是左padding,右邊就是右padding巷送,所以JSONP=JSON +Padding

讓我們理一下過程

請求方:ada.com 的前端程序員(瀏覽器)
響應(yīng)方:jack.com 的后端程序員(服務(wù)器)
1.請求方創(chuàng)建 script驶忌,src 指向響應(yīng)方,同時傳一個查詢參數(shù) ?callbackName=yyy
2.響應(yīng)方根據(jù)查詢參數(shù)callbackName笑跛,構(gòu)造形如
yyy.call(undefined, '你要的數(shù)據(jù)')
yyy('你要的數(shù)據(jù)')
這樣的響應(yīng)
3.瀏覽器接收到響應(yīng)付魔,就會執(zhí)行 yyy.call(undefined, '你要的數(shù)據(jù)')
4.那么請求方就知道了他要的數(shù)據(jù)
這就是 JSONP
約定:
callbackName -> callback
yyy -> 隨機(jī)數(shù) 如 ada1213123123412()

JSONP方案

button.addEventListener('click', (e)=>{
    let script = document.createElement('script')
    let functionName = 'ada'+ parseInt(Math.random()*10000000 ,10)
    window[functionName] = function(){  // 每次請求之前搞出一個隨機(jī)的函數(shù)
        amount.innerText = amount.innerText - 1
    }
    script.src = 'http://jack.com:8002/pay?callback=' + functionName
    document.body.appendChild(script)
    script.onload = function(e){ // 狀態(tài)碼是 200~299 則表示成功
        e.currentTarget.remove()
        delete window[functionName] // 請求完了就干掉這個隨機(jī)函數(shù)
    }
    script.onload = function(e){ // 狀態(tài)碼大于等于 400 則表示失敗
        e.currentTarget.remove()
        delete window[functionName] // 請求完了就干掉這個隨機(jī)函數(shù)
    }
})

Node部分:

if (path === '/pay') {
    var amount = fs.readFileSync('./db', 'utf8')
    var newAmount = amount - 1
    fs.writeFileSync('./db', newAmount)
    response.setHeader('Content-Type', 'application/javascript')
    response.write(`${query.callbackName}.call(undefined,
      'success'`)
    response.end()

jQuery寫法

 $.ajax({
 url: "http://jack.com:8002/pay",
 dataType: "jsonp",
 success: function( response ) {
     if(response === 'success'){
     amount.innerText = amount.innerText - 1
     }
 }
 })

JSONP 為什么不支持 POST?

因?yàn)? JSONP 是通過動態(tài)創(chuàng)建 Script 實(shí)現(xiàn)的飞蹂,而動態(tài)創(chuàng)建 Script只能用GET請求几苍,不能用POST請求


本文主要用于個人學(xué)習(xí)使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市陈哑,隨后出現(xiàn)的幾起案子妻坝,更是在濱河造成了極大的恐慌,老刑警劉巖芥颈,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惠勒,死亡現(xiàn)場離奇詭異,居然都是意外死亡爬坑,警方通過查閱死者的電腦和手機(jī)纠屋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盾计,“玉大人售担,你說我怎么就攤上這事赁遗。” “怎么了族铆?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵岩四,是天一觀的道長。 經(jīng)常有香客問我哥攘,道長剖煌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任逝淹,我火速辦了婚禮耕姊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栅葡。我一直安慰自己茉兰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布欣簇。 她就那樣靜靜地躺著规脸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熊咽。 梳的紋絲不亂的頭發(fā)上莫鸭,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音网棍,去河邊找鬼黔龟。 笑死,一個胖子當(dāng)著我的面吹牛滥玷,可吹牛的內(nèi)容都是我干的氏身。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼惑畴,長吁一口氣:“原來是場噩夢啊……” “哼蛋欣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起如贷,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陷虎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杠袱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尚猿,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年楣富,在試婚紗的時候發(fā)現(xiàn)自己被綠了凿掂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庄萎,靈堂內(nèi)的尸體忽然破棺而出踪少,到底是詐尸還是另有隱情,我是刑警寧澤糠涛,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布援奢,位于F島的核電站,受9級特大地震影響忍捡,放射性物質(zhì)發(fā)生泄漏集漾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一锉罐、第九天 我趴在偏房一處隱蔽的房頂上張望帆竹。 院中可真熱鬧,春花似錦脓规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绢陌,卻和暖如春挨下,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脐湾。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工臭笆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贱傀。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓虽抄,卻偏偏與公主長得像奔穿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茵乱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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

  • 1. JSONP的實(shí)現(xiàn)原理 JSONP是通過動態(tài)創(chuàng)建script實(shí)現(xiàn)的。請求方:frank.com 的前端程序員(...
    王童孟閱讀 473評論 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5孟岛? 答:HTML5是最新的HTML標(biāo)準(zhǔn)瓶竭。 注意:講述HT...
    kismetajun閱讀 27,489評論 1 45
  • html實(shí)現(xiàn)打錢效果 接下來用node來實(shí)現(xiàn)后臺打錢效果創(chuàng)建index.js文件,下面代碼第二部分寫在里面渠羞,并且通...
    小志1閱讀 508評論 1 1
  • JSONP 問:什么是JSONP斤贰? 1. 問題引入 在日常開發(fā)中,前端程序員想要從后端請求一些數(shù)據(jù)次询,是如何操作的呢...
    黃同學(xué)2019閱讀 420評論 0 2
  • 頁面數(shù)據(jù)交互的發(fā)展過程 付款是我們?nèi)粘V谐R姷囊环N金錢交易荧恍,用戶在頁面中點(diǎn)擊付款按鈕,網(wǎng)頁提交請求給服務(wù)器渗蟹,服務(wù)器...
    鷓鴣少閱讀 919評論 0 0