亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

AngularJS實現的JSONP跨域訪問數據傳輸功能詳解

2019-11-19 16:02:07
字體:
來源:轉載
供稿:網友

本文實例講述了AngularJS實現的JSONP跨域訪問數據傳輸功能。分享給大家供大家參考,具體如下:

大家會自然想到只有一個字母之差的JSON吧~

JSON(JavaScript Object Notation)JSONP(JSON with Padding)雖然只有一個字母的差別,但其實他們根本不是一回事兒

JSON是一種數據交換格式,而JSONP是一種依靠開發人員的聰明才智創造出的一種非官方跨域數據交互協議。我們拿最近比較火的諜戰片來打個比方,JSON是地下黨們用來書寫和交換情報的“暗號”,而JSONP則是把用暗號書寫的情報傳遞給自己同志時使用的接頭方式??吹經]?一個是描述信息的格式,一個是信息傳遞雙方約定的方法。

瀏覽器是存在同源策略這個機制的,在全局層面禁止了頁面加載或執行與自身來源不同的域的任何腳本。

JSONP是一種可以繞過瀏覽器的安全限制,從不同的域請求數據的方法。

Web頁面上調用js文件時則不受是否跨域的影響(不僅如此,我們還發現凡是擁有”src”這個屬性的標簽都擁有跨域的能力,比如<script>、<img>、<iframe>);

如果想通過純web端(ActiveX控件、服務端代理、屬于未來的HTML5之Websocket等方式不算)跨域訪問數據就只有一種可能,那就是在遠程服務器上設法把數據裝進js格式的文件里,供客戶端調用和進一步處理;JSON的純字符數據格式可以簡潔的描述復雜數據,被js原生支持,所以在web客戶端通過與調用腳本一模一樣的方式,來調用跨域服務器上動態生成的js格式文件(一般以JSON為后綴),顯而易見,服務器之所以要動態生成JSON文件,目的就在于把客戶端需要的數據裝入進去。為了便于客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。

JSONP的原理是通過<script>標簽發起一個GET請求來取代XHR請求。JSONP生成一個<script>標簽并插到DOM中,然后瀏覽器會接管并向src屬性所指向的地址發送請求。

當服務器返回請求時,響應結果會被包裝成一個JavaScript函數,并由該請求所對應的回調函數調用。

AngularJS在http服務中提供了一個JSONP輔助函數。通過http服務中提供了一個JSONP輔助函數。通過http服務的jsonp方法可以發送請求,如下所示:

$http .jsonp("https://api.github.com?callback=JSON_CALLBACK") .success(function(data) { // 數據});

當請求被發送時,AngularJS會在DOM中生成一個如下所示的<script>標簽:

<script src="https://api.github.com?callback=angular.callbacks._0" type="text/javascript"></script>

注意,JSON_CALLBACK被替換成了一個特地為此請求生成的自定義函數。當支持JSOPN的服務器返回數據時,數據會被包裝在由AngularJS生成的具名函數angular.callbacks._0中在這個例子中,GitHub服務器會返回包含在回調函數中的JSON數據,響應看起來如下所示: 

// 簡寫angular.callbacks._0({  'meta': {   'X-RateLimit-Limit': '60',   'status': 200  },  'data': {   'current_user_url': 'https://api.github.com/user'  }})

當AngularJS調用指定的回調函數時會對$http的promise對象進行resolve。當我們自己開發支持JSONP的后端服務時,要確保響應的數據被包含在請求所指定的回調函數中。使用JSONP需要意識到潛在的安全風險。首先,服務器會完全開放,允許后端服務調用應用中的任何JavaScript。不受我們控制的外部站點(或者蓄意攻擊者)可以隨時更改腳本,使我們的整個站點變得脆弱。服務器或中間人有可能會將額外的JavaScript邏輯返回給頁面,從而將用戶的隱私數據暴露出來。由于請求是由<script>標簽發送的,所以只能通過JSONP發送GET請求。并且腳本的異常也很難處理。使用JSONP一定要謹慎,同時只跟信任并可以控制的服務器進行通信。

一句話就是利用script標簽繞過同源策略,獲得一個類似這樣的數據,jsonpcallback是頁面存在的回調方法,參數就是想得到的json。

Jquery中jsonp的使用

myUrl = "http://localhost:8090/api/test";$.ajax({ type:"GET", url:myUrl, dataType:"jsonp", jsonp:"callback", jsonpCallback:"jsonpCallback", success:function(data){  alert(data.msg); }});function jsonpCallback(data){ alert(data);}

1.jsonp只能使用get請求,解決同源問題,返回javascript代碼,因為請求javascript文件是沒有同源問題的。
2.當請求數據類型為jsonp時,會將callback=jsonpCallback加在url上,http://localhost:8090/api/testcallback=jsonpCallback
3.前臺javascript中定義jsonpCallback函數,此函數必須定義在window下,也就是全局的函數,否則找不到。
4.后臺獲取請求的callback參數值jsonpCallback,返回字符串"jsonpCallback(result)",result為返回結果。
5.請求返回的是script tag,首先會調用jsonpCallback函數,不管是否找到該函數,都會調用success函數。
6.如果沒有定義jsonp和jsonpCallback,jsonp默認為"callback",jsonpCallback會是Jquery自動生成的函數名。

angularJS中jsonp的使用

myUrl = "http://localhost:8090/api/test?callback=JSON_CALLBACK";$http.jsonp(myUrl).success( function(data){  alert(data); });

1.angularJS中使用$http.jsonp函數
2.指定callback和回調函數名,函數名為JSON_CALLBACK時,會調用success回調函數,JSON_CALLBACK必須全為大寫。
3.也可以指定其它回調函數,但必須是定義在window下的全局函數。
4.url中必須加上callback
5.當callback為JSON_CALLBACK時,只會調用success,即使window中有JSON_CALLBACK函數,也不會調用該函數。

更多關于AngularJS相關內容感興趣的讀者可查看本站專題:《AngularJS指令操作技巧總結》、《AngularJS入門與進階教程》及《AngularJS MVC架構總結

希望本文所述對大家AngularJS程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区二区三区四区在线| 亚洲天堂网在线观看| 最新国产成人av网站网址麻豆| 国产精品亚洲片夜色在线| 国产午夜精品全部视频播放| 欧美激情亚洲激情| 中文字幕成人在线| 国产欧美一区二区三区四区| 日韩成人av网| 性欧美激情精品| 2019中文字幕免费视频| 成人有码视频在线播放| 国产成人精品综合久久久| 亚洲男人天堂网站| 亚洲成人精品视频在线观看| 91热福利电影| 日韩高清a**址| 精品一区二区三区三区| 国产成人精品a视频一区www| 日本精品免费观看| 亚洲乱码一区av黑人高潮| 97久久久免费福利网址| 成人免费黄色网| 精品少妇一区二区30p| 亚洲新中文字幕| 免费99精品国产自在在线| 欧美乱大交做爰xxxⅹ性3| 欧美精品videossex性护士| 九九热最新视频//这里只有精品| 久久精品国产一区| 久久综合88中文色鬼| 精品一区二区三区电影| 91精品国产网站| 亚洲视频欧美视频| 欧美日韩在线第一页| 日韩国产欧美精品在线| 日韩精品中文在线观看| 欧美老妇交乱视频| 国产精品久久二区| 久操成人在线视频| 国产欧美日韩丝袜精品一区| 日韩不卡中文字幕| 97免费中文视频在线观看| 国产精品pans私拍| 国产精品美女在线观看| 欧美一区三区三区高中清蜜桃| 亚洲级视频在线观看免费1级| 亚洲视频日韩精品| 日韩精品小视频| 国产精品高潮呻吟久久av野狼| 欧美激情网站在线观看| 国产91对白在线播放| 韩曰欧美视频免费观看| 中文字幕亚洲综合久久| 蜜月aⅴ免费一区二区三区| 国产精品av在线播放| 久久精品久久久久久国产 免费| 久久九九热免费视频| 色青青草原桃花久久综合| 夜夜嗨av色综合久久久综合网| 亚洲韩国青草视频| 国产日本欧美一区| 色999日韩欧美国产| 国内精品小视频在线观看| 伊人久久久久久久久久久久久| 久久精品国产欧美亚洲人人爽| 日韩一级裸体免费视频| 中文字幕亚洲欧美日韩2019| 亚洲成人黄色网址| 欧美一级高清免费| 国产精品影院在线观看| 亚洲自拍另类欧美丝袜| 原创国产精品91| 国产精品丝袜视频| 一个色综合导航| 尤物九九久久国产精品的分类| 韩国国内大量揄拍精品视频| 国产精品日韩欧美大师| 国产成人一区二区三区小说| 久久99热精品这里久久精品| 成人有码在线播放| 亚洲精品视频久久| 中文字幕国产亚洲2019| 日韩中文在线不卡| 欧美电影在线观看网站| 国产成人精品久久二区二区91| 国产精品对白刺激| 国产国语videosex另类| 成人中文字幕+乱码+中文字幕| 亚洲精品wwwww| 91在线国产电影| 国产丝袜一区视频在线观看| 欧美日韩国产二区| 国产综合久久久久| 欧美激情在线观看视频| 欧洲成人性视频| 97视频在线观看视频免费视频| 国产精品爽爽爽爽爽爽在线观看| 国产极品jizzhd欧美| 国产精品午夜国产小视频| 宅男66日本亚洲欧美视频| 自拍亚洲一区欧美另类| 日韩精品视频在线免费观看| 91国语精品自产拍在线观看性色| 欧美色视频日本版| 91久久精品国产91久久| 欧美福利视频网站| 国产精品视频公开费视频| 国产日韩专区在线| 国产91精品久| 成人有码在线视频| 亚洲欧美在线第一页| 精品久久久av| 中日韩美女免费视频网站在线观看| 2018国产精品视频| 91精品国产一区| 亚洲区一区二区| 欧美激情视频三区| 国产成人精品日本亚洲| 亚洲性生活视频在线观看| 久久久久久亚洲精品| 日韩精品在线视频| www国产亚洲精品久久网站| 成人午夜在线影院| 久久久国产影院| 久久久久久久久久av| 国产成人涩涩涩视频在线观看| 日韩中文在线中文网在线观看| 国产精品一区二区三区久久| 亚洲网站在线播放| 色综合久久精品亚洲国产| 欧美日韩在线观看视频小说| 伊人av综合网| 国产午夜精品一区理论片飘花| 亚洲精品天天看| 一级做a爰片久久毛片美女图片| 久久久久久久久久国产| 亚洲精品一区av在线播放| 欧美一区二区.| 国产精品一二三在线| 8050国产精品久久久久久| 日韩免费在线电影| 国产精品av免费在线观看| 91精品国产综合久久久久久久久| 美女视频黄免费的亚洲男人天堂| 97在线视频免费观看| 日本精品视频网站| 欧美一区二粉嫩精品国产一线天| 日韩在线视频观看| 欧美人成在线视频| 欧美特黄级在线| 成人97在线观看视频| 久久久国产精品x99av| 欧美性生交xxxxx久久久| 国产精品青草久久久久福利99| 国产精品国内视频| 欧美大片免费看| 亚洲精品资源美女情侣酒店| 欧美最猛性xxxxx(亚洲精品)| 国产精品视频不卡| 午夜欧美大片免费观看| 成年无码av片在线| 久久久成人精品视频| 亚洲欧美自拍一区|