什么是JSONP

JSONP就是一個對象丙者,有左padding和右padding掀宋,對象里的key要加雙引號(符合JSON語法)戚丸,這個對象叫做JSON,左padding和右padding叫做P裸违,合起來就是JSONP掖桦。

統(tǒng)一把“我請求一個script,script調(diào)用我的一個函數(shù)同時把這個函數(shù)放在第一個參數(shù)的這種形式叫做JSONP供汛,只不過特殊情況下會出現(xiàn)JSON枪汪,一般都是StringP。

JSONP要解決的問題是兩個網(wǎng)站之間要怎么交流怔昨。

JSONP的完整過程:

請求方:xxx.com的前端程序員(瀏覽器)
響應(yīng)方:yyy.com的后端程序員(服務(wù)器)
1.請求方創(chuàng)建script.src指向響應(yīng)方雀久,同時傳一個查詢參數(shù)?callbackName = xxx(任意名字)
2.響應(yīng)方根據(jù)查詢參數(shù)callbackName,構(gòu)造形如:
(1)xxx.call(undefined,'你要的數(shù)據(jù)')
(2)xxx('你要的數(shù)據(jù)')
這樣的響應(yīng)趁舀,然后把數(shù)據(jù)作為第一個參數(shù)傳給請求方
3.瀏覽器接收到響應(yīng)赖捌,就會執(zhí)行xxx.call(undefined,'你要的數(shù)據(jù)')
4.那么請求方就知道了他要的數(shù)據(jù)

行業(yè)達成的共識:

1.callbackName約定必須叫做callback/jquery-callback
2.callback的名字可以隨便取,但是不要以數(shù)字開頭赫编。

符合約定的寫法:

JS里寫:

button.addEventListener('click',(e) => {
  let script = document.createElement('script')
  //創(chuàng)建一個隨機數(shù)巡蘸,調(diào)用完后就立馬移除,就不會污染全局變量
  let functionName = 'wen' + parseInt(Math.random()*100000,10)
window[functionName] = function(result){
  if(result === 'success'){
    amount.innerText = amount.innerText - 1
}else{
    alert('失敗')
      }
}
script.src = 'http://xxx.com:8001/pay?callback = ' + functionName
document.body.appendChild(script) //要把script放到body里擂送,不然不生效
script.onload = function(e){
  e.currentTarget.remove() //移除當前的script  
  delete window[functionName] //移除調(diào)用的隨機函數(shù)
}
script.onerror = function(e){
  e.currentTarget.remove()
  delete window[functionName]
}
})

node.js里寫:

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

JSONP的jQuery的寫法:

 $.ajax({ //雖然API是ajax悦荒,但是跟ajax沒有關(guān)系
 url: "http://jack.com:8002/pay",
 dataType: "jsonp",
 success: function( response ) {
     if(response === 'success'){
     amount.innerText = amount.innerText - 1
     }
 }
 })     //使用jQuery的話,如何構(gòu)造script不用管嘹吨,如何構(gòu)造callback也不用管搬味,如何調(diào)用后臺也不用管

 $.jsonp()

JSONP為什么不支持POST請求

因為JSONP是通過動態(tài)創(chuàng)建script創(chuàng)建的,動態(tài)創(chuàng)建script的時候只能用get蟀拷,沒有辦法用post碰纬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市问芬,隨后出現(xiàn)的幾起案子悦析,更是在濱河造成了極大的恐慌,老刑警劉巖此衅,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件强戴,死亡現(xiàn)場離奇詭異亭螟,居然都是意外死亡,警方通過查閱死者的電腦和手機骑歹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門预烙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人道媚,你說我怎么就攤上這事扁掸。” “怎么了最域?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵谴分,是天一觀的道長。 經(jīng)常有香客問我镀脂,道長狸剃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任狗热,我火速辦了婚禮钞馁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匿刮。我一直安慰自己僧凰,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布熟丸。 她就那樣靜靜地躺著训措,像睡著了一般。 火紅的嫁衣襯著肌膚如雪光羞。 梳的紋絲不亂的頭發(fā)上绩鸣,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天导梆,我揣著相機與錄音墓怀,去河邊找鬼。 笑死秤涩,一個胖子當著我的面吹牛潜慎,可吹牛的內(nèi)容都是我干的捡多。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼铐炫,長吁一口氣:“原來是場噩夢啊……” “哼垒手!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倒信,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤科贬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳖悠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榜掌,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸭丛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唐责。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘾带,死狀恐怖鼠哥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情看政,我是刑警寧澤朴恳,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站允蚣,受9級特大地震影響于颖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嚷兔,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一森渐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冒晰,春花似錦同衣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蒋情,卻和暖如春埠况,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棵癣。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工辕翰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狈谊。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓金蜀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親的畴。 傳聞我的和親對象是個殘疾皇子渊抄,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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

  • 什么是JSONP? 先說說JSONP是怎么產(chǎn)生的: 其實網(wǎng)上關(guān)于JSONP的講解有很多丧裁,但卻千篇一律护桦,而且云里霧里...
    wanggs閱讀 409評論 0 2
  • AJAX、JSON煎娇、JSONP 在 WEB 開發(fā)中二庵,經(jīng)常見到諸如 AJAX贪染、JSON、JSONP 這些詞催享,但這三種...
    沮溺閱讀 632評論 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5杭隙? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,445評論 1 45
  • 到底什么是JSONP因妙?它和JSON到底有什么關(guān)系痰憎?這是我碰到JSONP時腦海里的浮現(xiàn)的第一個問題。先看看維基百科上...
    左冬的博客閱讀 568評論 0 1
  • 唐晨光焦慮了一路攀涵,在車上不停的拿出手機來看時間铣耘,拿出來以后又忘了拿手機出來要做什么,眼里明明看到了時間以故,卻也沒記住...
    錯錯沒有錯閱讀 366評論 0 7