第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問(wèn)答
課簽
筆記
評(píng)論
占位
占位

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

我們發(fā)送一個(gè) jsonp 的請(qǐng)求:

$.ajax({
    crossDomain:true,//強(qiáng)制跨域
    url: ' http://url...’, //不同的域
    type: 'GET', // jsonp模式只有GET是合法的
    data: {
        'action': 'aaron'
    }, // 預(yù)傳參的數(shù)組
    dataType: 'jsonp', // 數(shù)據(jù)類型
    jsonp: 'backfunc', // 指定回調(diào)函數(shù)名,與服務(wù)器端接收的一致,并回傳回來(lái)
})

通過(guò) ajax 請(qǐng)求不同域的實(shí)現(xiàn),jsonp 底層不是靠 XmlHttpRequest 而是 script,所以不要被這個(gè)方法給迷惑了。

這里有幾個(gè)要注意的:

  1. 在 ajax 請(qǐng)求中類型如果是 type 是 post,其實(shí)內(nèi)部都只會(huì)用 get,因?yàn)槠淇缬虻脑砭褪怯玫膭?dòng)態(tài)加載 script 的 src,所以我們只能把參數(shù)通過(guò) url 的方式傳遞
  2. 我們使用了 dataType 是 'jsonp' 但是 jquery 內(nèi)部有進(jìn)一步的優(yōu)化,如果探測(cè)到還是同域下的請(qǐng)求,依然還是用 XmlHttpRequest 處理,所以我們?cè)谕蛳聹y(cè)試的話,可以把 crossDomain 選項(xiàng)置為 true,這樣強(qiáng)制為跨域處理,這樣就會(huì)通過(guò) script 處理了,那么根據(jù) jsonp 的原理其實(shí) jquery 內(nèi)部會(huì)把 URL 最終會(huì)轉(zhuǎn)化成:
http://192.168.1.113:8080/github/jQuery/jsonp.php?callback=flightHandler&action=aaron&_=1418782732584 ">

然后通過(guò)創(chuàng)建腳本動(dòng)態(tài)加載:

<script type="text/javascript" src=" http://192.168.1.113:8080/github/jQuery/jsonp.php?callback=flightHandler&amp;action=aaron&amp;_=1418782732584 "></script>

然后 php 方就會(huì)收到 get 請(qǐng)求的參數(shù),通過(guò)解析出 callback 執(zhí)行 callback 這個(gè)回調(diào)并傳遞參數(shù)。

要處理的幾個(gè)問(wèn)題

1. 采用的是腳本請(qǐng)求的方法,所以雖然 dataType 是 'jsonp' 但是內(nèi)部還是按照 script 處理
2. get 請(qǐng)求的后綴拼接,編碼的處理
3. 避免緩存的處理

所以流程就會(huì)分二步:

  1. 針對(duì) jsonp 的預(yù)處理,主要是轉(zhuǎn)化拼接這些參數(shù),然后處理緩存,因?yàn)?jsonp 的方式也是靠加載 script 所以要關(guān)閉瀏覽器緩存
  2. inspectPrefiltersOrTransports中jsonp 的預(yù)處理后,還要在執(zhí)行 inspect(dataTypeOrTransport); 的遞歸,就是為了關(guān)閉這個(gè)緩存機(jī)制
  3. jquery 通過(guò)預(yù)處理會(huì)在 window 對(duì)象中加載一個(gè)全局的函數(shù),當(dāng)代碼插入時(shí)函數(shù)執(zhí)行,執(zhí)行完畢后就會(huì)被移除。同時(shí) jquery 還對(duì)非跨域的請(qǐng)求進(jìn)行了優(yōu)化,如果這個(gè)請(qǐng)求是在同一個(gè)域名下那么他就會(huì)像正常的 Ajax 請(qǐng)求一樣工作。


分發(fā)器執(zhí)行代碼

當(dāng)我們所有的參數(shù)都轉(zhuǎn)化好了,此時(shí)會(huì)經(jīng)過(guò)請(qǐng)求發(fā)送器用來(lái)處理發(fā)送的具體,為什么會(huì)叫做分發(fā)器,因?yàn)榘l(fā)送的請(qǐng)求目標(biāo),ajax 因?yàn)閰㈦s了 jsonp 的處理,所以實(shí)際上的請(qǐng)求不是通過(guò) xhr.send(XmlHttpRequest) 發(fā)送的,而是通過(guò) get 方式的腳本加載的,所以 transports 對(duì)象在初始化構(gòu)件的時(shí)候,會(huì)生成 2 個(gè)處理器

*: Array[1]     針對(duì)xhr方式
script: Array[1]  針對(duì)script,jsonp方式

所以 transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR),那么得到的 transport 就會(huì)根據(jù)當(dāng)前的處理的類型,來(lái)選擇采用哪種發(fā)送器(*、script)所以最終的實(shí)現(xiàn)就是通過(guò)動(dòng)態(tài)加載腳本!

 

任務(wù)

?不會(huì)了怎么辦
||

提問(wèn)題

寫筆記

公開筆記
提交
||

請(qǐng)驗(yàn)證,完成請(qǐng)求

由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求

加群二維碼

打開微信掃碼自動(dòng)綁定

您還未綁定服務(wù)號(hào)

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問(wèn)題答復(fù)提醒
  • · 賬號(hào)支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請(qǐng)您關(guān)注公眾號(hào)
關(guān)注后,及時(shí)獲悉本課程動(dòng)態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問(wèn)將花費(fèi)2個(gè)積分

你的積分不足,無(wú)法發(fā)表

為什么扣積分?

本次提問(wèn)將花費(fèi)2個(gè)積分

繼續(xù)發(fā)表請(qǐng)點(diǎn)擊 "確定"

為什么扣積分?