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

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

jsonp的原理

 ajax 和 jsonp 區(qū)別如下: 

  • ajax 的核心是通過(guò) XmlHttpRequest 獲取非本頁(yè)內(nèi)容。
  • jsonp 的核心則是動(dòng)態(tài)添加 <script> 標(biāo)簽來(lái)調(diào)用服務(wù)器提供的 js 腳本,允許用戶傳遞一個(gè) callback 參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時(shí)會(huì)將這個(gè) callback 參數(shù)作為函數(shù)名來(lái)包裹住 JSON 數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來(lái)自動(dòng)處理返回?cái)?shù)據(jù)了。

jquery、ext、dojo 這類庫(kù)的實(shí)現(xiàn)手段其實(shí)大同小異,在同源策略下,在某個(gè)服務(wù)器下的頁(yè)面是無(wú)法獲取到該服務(wù)器以外的數(shù)據(jù)的,但 img、iframe、script 等標(biāo)簽是個(gè)例外,這些標(biāo)簽可以通過(guò) src 屬性請(qǐng)求到其他服務(wù)器上的數(shù)據(jù)。利用 script 標(biāo)簽的開(kāi)放策略,我們可以實(shí)現(xiàn)跨域請(qǐng)求數(shù)據(jù),當(dāng)然,也需要服務(wù)端的配合。一般的 ajax 是不能跨域請(qǐng)求的,因此需要使用一種特別的方式來(lái)實(shí)現(xiàn)跨域,其中的原理是利用 <script> 元素的這個(gè)開(kāi)放策略。

這里有2個(gè)重要的參數(shù):

jsonpCallback:
為 jsonp 請(qǐng)求指定一個(gè)回調(diào)函數(shù)名。這個(gè)值將用來(lái)取代 jQuery 自動(dòng)生成的隨機(jī)函數(shù)名。這主要用來(lái)讓 jQuery 生成一個(gè)獨(dú)特的函數(shù)名,這樣管理請(qǐng)求更容易,也能方便地提供回調(diào)函數(shù)和錯(cuò)誤處理。你也可以在想讓瀏覽器緩存 GET 請(qǐng)求的時(shí)候,指定這個(gè)回調(diào)函數(shù)名。從jQuery 1.5 開(kāi)始,你也可以使用一個(gè)函數(shù)作為該參數(shù)設(shè)置,在這種情況下,該函數(shù)的返回值就是 jsonpCallback 的結(jié)果。

jsonp:
在一個(gè) jsonp 請(qǐng)求中重寫(xiě)回調(diào)函數(shù)的名字。這個(gè)值用來(lái)替代在 "callback=?" 這種 GET 或 POST 請(qǐng)求中 URL 參數(shù)里的 "callback" 部分,比如 {jsonp:'onJsonPLoad'} 會(huì)導(dǎo)致將 "onJsonPLoad=?" 傳給服務(wù)器。在 jQuery 1.5,設(shè)置 jsonp 選項(xiàng)為 false,阻止了 jQuery 從加入 "?callback" 字符串的 URL 或試圖使用 "=?" 轉(zhuǎn)換。在這種情況下,你也應(yīng)該明確設(shè)置 jsonpCallback 設(shè)置。例如, { jsonp: false, jsonpCallback: "callbackName" }。

當(dāng)我們正常地請(qǐng)求一個(gè) JSON 數(shù)據(jù)的時(shí)候,服務(wù)端返回的是一串 JSON 類型的數(shù)據(jù),而我們使用 JSONP 模式來(lái)請(qǐng)求數(shù)據(jù)的時(shí)候,服務(wù)端返回的是一段可執(zhí)行的 JavaScript 代碼,所以我們可見(jiàn)服務(wù)器代碼最后一行。

$_GET['callback']).'('. json_encode(array('status'=>1,'info'=>'OK')) .')

就是執(zhí)行的 backfunc 方法,然后把數(shù)據(jù)通過(guò)回調(diào)的方式傳遞過(guò)。

OK,就是整個(gè)流程就是:

客戶端發(fā)送一個(gè)請(qǐng)求,規(guī)定一個(gè)可執(zhí)行的函數(shù)名(這里就是 jQuery 做了封裝的處理,自動(dòng)幫你生成回調(diào)函數(shù)并把數(shù)據(jù)取出來(lái)供 success 屬性方法來(lái)調(diào)用,不是傳遞的一個(gè)回調(diào)句柄),服務(wù)端接受了這個(gè) backfunc 函數(shù)名,然后把數(shù)據(jù)通過(guò)實(shí)參的形式發(fā)送出去

右邊偽代碼模擬了下 jsonp 的原理。

 

任務(wù)

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

提問(wèn)題

寫(xiě)筆記

公開(kāi)筆記
提交
||

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

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

加群二維碼

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

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

綁定后可得到

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

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

使用 Ctrl+D 可將課程添加到書(shū)簽

邀請(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)擊 "確定"

為什么扣積分?