AngularJS中的JSONP實(shí)例解析
概念
首先呢,Json和JSONP是不一樣的哦。Json呢,是眾多數(shù)據(jù)存儲的其中一種格式,是數(shù)據(jù)書寫方式的其中一種。好比是大中華眾多詩體的一種(比如說是七言詩吧)。這種詩體規(guī)定了: 這種詩體要包含題目,每行詩句的字?jǐn)?shù)(7個字) 等等的文本格式。而Json所規(guī)定的文本格式是這樣子的

(Json格式示意圖)
而JSONP呢,它是一種特殊的通訊方式,使用它能夠輕松繞過瀏覽器的同源安全限制,達(dá)到加載來自不同源的資源(腳本, 圖片, 其他)的效果。比如說,您是一個王國的王子,你意外地喜歡上了附近一個小城鎮(zhèn)里面的一位漂亮年輕的姑娘(資源),你想和她見面并進(jìn)一步往下發(fā)展(獲取資源)。但是呢,您的父親國王先生(瀏覽器)可不同意,國王認(rèn)為這個姑娘不是王室的女孩(非同源的資源),配不上王子,把王子困在城堡里面的同時,還往城堡外放好多士兵監(jiān)察,禁止外人進(jìn)入(瀏覽器的同源安全限制)。但是王子對愛非常堅(jiān)持,他試過多種方式與這個姑娘聯(lián)系,比如說讓太監(jiān)歐巴帶封信給漂亮姑娘(PUT,GET,POST等等),但是呢,每當(dāng)?shù)竭_(dá)城門的時候,士兵就會發(fā)現(xiàn)這封信的地址是給小姑娘的,于是屢屢禁止了太監(jiān)出去(獲取外部資源時,PUT,GET,POST不奏效)。于是王子想到了一種特殊的通訊方式,就是飛鴿傳書(JSONP),小鴿子呢能夠飛躍城堡,從而避開士兵的監(jiān)察(繞過瀏覽器的同源安全限制),來達(dá)到與姑娘通訊的效果(與跨域資源共享CORS的通訊實(shí)現(xiàn)啦!O(∩_∩)O)。最終,經(jīng)過九九八十一難之后,王子喜歡上了太監(jiān)(∑(っ °Д °;)っ 人生處處充滿驚喜...)
具體的實(shí)現(xiàn)方法
要達(dá)到這種通訊效果,王子(發(fā)送請求的方式)和姑娘(服務(wù)端)都要有所準(zhǔn)備。
王子在發(fā)送JSONP請求的時候,首先需要一只鴿子吧(使用Jsonp), 再來呢,需要一封信綁在鴿子上(地址欄中的callback參數(shù))
$http.jsonp("...})
當(dāng)姑娘接到小鴿子帶來的信之后呢,也要把內(nèi)容寫在小鴿子身上的信,來回信(通過callback參數(shù),把響應(yīng)內(nèi)容包裝成一個JavaScript參數(shù),并由該請求對應(yīng)的回調(diào)函數(shù)來進(jìn)行調(diào)用)
包裝數(shù)據(jù)的方法
res.send(【callback函數(shù)】+ '('+ JSON.stringify(result) + ')');
其他細(xì)節(jié)
使用JSONP的時候,AngularJS會生成一個 <script> 標(biāo)簽并插入到DOM中進(jìn)行請求,響應(yīng)成功之后會把該節(jié)點(diǎn)刪除(刪除節(jié)點(diǎn)這點(diǎn)具體Angular版本不同可能會有所不同吧)
其中,CALLBACK會被替換成一個特地為此請求生成的自定義函數(shù),即是由
$http.jsonp("變成
<script src=">
因此當(dāng)我們自己開發(fā)JSONP的后端服務(wù)時,要確保響應(yīng)數(shù)據(jù)被包含在請求指定的回調(diào)函數(shù)中
注意事項(xiàng)
使用JSOPN有潛在的安全隱患,因?yàn)镴SONP允許后端服務(wù)調(diào)用應(yīng)用的JavaScript,使站點(diǎn)變得脆弱的同時,還可能暴露用戶隱私
文章參考
以上就是本文的全部內(nèi)容,希望對大家有所幫助,同時也希望多多支持腳本之家!
相關(guān)文章
jQuery插件boxScroll實(shí)現(xiàn)圖片輪播特效
本文給大家分享的是使用jQuery插件Boxscroll來實(shí)現(xiàn)簡單的圖片輪播特效的代碼,非常簡單實(shí)用,有需要的小伙伴可以參考下。2015-07-07
基于jquery實(shí)現(xiàn)彩色投票進(jìn)度條代碼解析
這篇文章主要介紹了基于jquery實(shí)現(xiàn)彩色投票進(jìn)度條代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
jquery獲取當(dāng)前元素索引值用法實(shí)例
這篇文章主要介紹了jquery獲取當(dāng)前元素索引值用法,實(shí)例分析了jQuery獲取當(dāng)前元素索引在創(chuàng)建圖片輪播效果中的使用技巧,需要的朋友可以參考下2015-06-06
jQuery之網(wǎng)頁換膚實(shí)現(xiàn)代碼
用jQuery做網(wǎng)頁換膚確實(shí)是很一個很巧妙,很好的選擇,這是本人在學(xué)習(xí)jQuery中學(xué)的知識,感覺很有用,寫了下來,希望大家有更好的方法或者代碼不足的地方請諒解,本人也是初學(xué)者啊,希望大家互相勉勵互相學(xué)習(xí)。2011-04-04
在IE 瀏覽器中使用 jquery的fadeIn() 效果 英文字符字體加粗
在IE 瀏覽器中使用 jquery的fadeIn() 效果 英文字符字體加粗的解決方法分享。2011-06-06

