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

首頁 > 編程 > JavaScript > 正文

JS JSOP跨域請求實例詳解

2019-11-20 09:33:37
字體:
來源:轉載
供稿:網友

在項目開發中遇到跨域的問題,一般都是通過JSONP來解決的。但是JSONP到底是個什么東西呢,實現的原理又是什么呢。在項目的空閑時間可以好好的來研究一下了。

1、什么是JSONP?

要了解JSONP,不得不提一下JSON,那么什么是JSON?

JSON is a subset of the object literal notation of JavaScript. Since JSON is a subset of JavaScript, it can be used in the language with no muss or fuss.

JSONP(JSON with Padding)是一個非官方的協議,它允許在服務器端集成Script tags返回至客戶端,通過javascript callback的形式實現跨域訪問(這僅僅是JSONP簡單的實現形式)。

2、JSONP有什么用?

由于同源策略的限制,XmlHttpRequest只允許請求當前源(域名、協議、端口)的資源,為了實現跨域請求,可以通過script標簽實現跨域請求,然后在服務端輸出JSON數據并執行回調函數,從而解決了跨域的數據請求。

JSONP的產生

1.眾所周知,Ajax請求資源受同域的限制,不管是靜態資源,動態頁面,web服務都不行

2.同時我們發現web頁面上調用JS文件時則不受跨域的影響(不僅如此,我們還發現凡是擁有‘src'這個屬性的標簽都擁有跨域的能力,比如<script>、<img>、<iframe>等)

3.可想而知,當前階段如果想通過web端(ActiveX控件、服務器代理、HTML5的websocket等方式不算)跨域訪問數據就只有一種可能,那就是服務端把數據裝進JS格式的文件里,供客戶端調用和處理

4.數據的傳輸,我們知道一種叫JSON的純字符數據格式可以簡潔的描述復雜的數據結構,而且還被JS原生支持,在客戶端可以很容易的處理這種格式的數據

5.這樣解決方案的一目了然了,web端通過和調用腳本一模一樣的方式,來調用跨域服務器上動態生成的JS文件。服務器之所以要動態生成JS文件,目的在于獲取客戶端的回調函數名并把客戶端需要的數據通過JSON(也可以是純字符串)的格式傳進去

6.在客戶端對JS文件調用成功后,也就獲取到了回調函數里的參數,剩下的就是對數據的處理了,這種方法和Ajax看起來很像,但是卻并不一樣(Jquery將JSONP和Ajax封裝在一起,如果不了解的人會混為一談)

7.為了便于客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了

好了,不知道大家對JSONP理解了沒有,如果沒有的話,鄙人就出來總結一下,說的不好,不要打我。

其實原理就是,客戶端請求一個鏈接,并把需要的參數加上,callback表示是一個JSONP的請求(這個前端和后臺可以自己統一),后臺解析這個請求鏈接,發現是一個JSONP的請求,然后生成一個調用方法,并根據請求參數動態生成一個字符串(可以是JSON,也可以是純字符串)塞進調用方法里,這樣客戶端就可以那到數據并做后續的處理了。

說了這么多,不上代碼不是我的風格啊,上代碼。。

function test(data){console.log(data)}var url="http://www.x.com/test?a=1&callback=test"http://向x.com/test傳遞參數a值為1,并告訴他要調用的函數名是“test”//后臺攔截到callback,知道要生成一個調用方法,方法名是test,并傳遞參數,后臺處理生成如下(數據虛構)test("aaaaaa")test({a:1,b:2})//然后前端通過script標簽去訪問并執行,上面的東西var script = document.createElement('script');script.setAttribute('src', url);// 把script標簽加入head,此時調用開始document.getElementsByTagName('head')[0].appendChild(script); //然后就會調用頁面的test方法,這就是jsonp的實現原理。

關于Jquery中JSONP的現實

$.ajax({type: "GET",url: "http://x.d.cn/asych/adv.html?loc=8&callBack=?",//告訴后臺這是一個jsonp請求,需要調用什么方法,如果為“?”,jq會幫你自動生成(如果使用jq一般都設置為“?”,這樣才能在成功時觸發jq的回調函數)type:"post",//jsonp只能發get請求,就算我設置請求類型為postdataType:"jsonp",//告訴jquery這是一個jsonp的數據,需要生成script標簽來加載jsdata:{a:"1"},/*success: function (data) {//成功后jq會執行的方法(如果callback參數為“?”)$("body").append(data);},*/error: function (XMLHttpRequest, textStatus, errorThrown) {//alert(errorThrown);}}).done(function(data){$("body").append(data);});

看了上面的代碼和注釋,相信大家都明白了吧,雖然Jquery將JSONP封裝到Ajax中,但是本質上是不同的。

Ajax的核心是通過XmlHttpRequest獲取非本頁內容,而JSONP的核心則是動態添加<script>標簽來調用服務器提供的js腳本。

所以Ajax和JSONP的區別不在于是否跨域,Ajax通過服務端代理一樣可以實現跨域,JSONP本身也不排斥同域數據的獲取。

還有上面說到過,JSONP和Ajax的數據格式不一定要是JSON,也可以是純字符串。

總而言之,JSONP不是Ajax的一個子集,即使Jquery將JSONP封裝進Ajax,也不能改變這一點。

以上所述是小編給大家介紹的JS JSOP跨域請求實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩亚洲精品一区二区三区| 中文日韩电影网站| 97在线视频免费观看| 成人黄色免费片| 福利二区91精品bt7086| 国产97在线|日韩| 亚洲精品99久久久久中文字幕| 一区二区在线免费视频| 成人网中文字幕| 国产精品久久一区主播| 日韩中文字幕久久| 成人亚洲激情网| 亚洲成人网av| 亚洲精品按摩视频| 国产中文字幕亚洲| 精品国产一区二区三区久久久| 色无极亚洲影院| 欧美黑人一区二区三区| 亚洲一区二区少妇| 国产精品电影在线观看| 国模视频一区二区| 欧美国产日韩一区二区在线观看| 亚洲福利视频二区| 亚洲国产福利在线| 欧美激情图片区| 亚洲男人的天堂在线播放| 97av在线视频免费播放| 91天堂在线视频| 日韩亚洲在线观看| 欧美精品videos| 国产拍精品一二三| 国产视频精品va久久久久久| 日本不卡免费高清视频| 欧美日韩xxx| 亚洲精品在线不卡| 国产91免费看片| 欧美一区二区三区艳史| 亚洲美女中文字幕| 久久国产精品影片| 欧美孕妇性xx| 成人亚洲激情网| 日韩电视剧在线观看免费网站| 亚洲精品影视在线观看| 成人久久一区二区三区| 国产ts一区二区| 欧美在线视频免费播放| 欧美贵妇videos办公室| 日韩精品免费在线观看| 亚洲欧美另类国产| 日韩中文字幕视频在线观看| 日韩欧美成人网| 亚洲精品日韩激情在线电影| 色综合91久久精品中文字幕| 久久夜精品香蕉| 性视频1819p久久| 久久久久久999| 国产精品欧美在线| 91免费精品视频| 欧美黑人巨大精品一区二区| 久久综合九色九九| 国产精品视频色| 亚洲2020天天堂在线观看| 91精品久久久久久综合乱菊| 国产一区在线播放| 91热福利电影| 亚洲а∨天堂久久精品9966| 在线观看日韩av| 伊人亚洲福利一区二区三区| 欧洲日韩成人av| 欧美日本在线视频中文字字幕| 在线视频欧美日韩精品| 亚洲欧美日韩精品久久亚洲区| 国产精品久久久久久久天堂| 欧美体内谢she精2性欧美| 久久噜噜噜精品国产亚洲综合| 久久精品在线播放| 日韩美女av在线免费观看| 亚洲国产日韩欧美综合久久| 欧美极品少妇xxxxⅹ裸体艺术| 欧美一级片在线播放| 日韩视频精品在线| 亚洲人成人99网站| 日韩av手机在线观看| 最新的欧美黄色| 一区二区亚洲精品国产| 精品福利在线视频| 在线观看视频亚洲| 欧美大尺度激情区在线播放| 国语自产精品视频在免费| 中文字幕亚洲第一| 九九九热精品免费视频观看网站| 欧美性猛交xxxx久久久| 在线电影av不卡网址| 欧美日韩免费一区| 日韩在线观看免费高清完整版| 亚洲а∨天堂久久精品9966| 久久在精品线影院精品国产| 91久久精品视频| 亚洲资源在线看| 欧美丰满老妇厨房牲生活| 亚洲黄色www网站| 最新亚洲国产精品| 日韩黄色av网站| 午夜精品在线视频| 免费97视频在线精品国自产拍| 亚洲高清一区二| 亚洲国产成人精品电影| 欧美性猛交xxxx乱大交| 久久久精品网站| 黑人与娇小精品av专区| 国产一级揄自揄精品视频| 欧美成人一二三| 日韩电影免费观看在线| 亚洲精品免费在线视频| 日韩在线视频导航| 中文字幕日韩av电影| 亚洲理论片在线观看| 亚洲男人的天堂网站| 亚洲久久久久久久久久久| 欧美激情精品久久久久久久变态| 久久精品视频在线观看| 在线亚洲国产精品网| 色婷婷**av毛片一区| 91久久久久久久久久久| 日韩在线视频观看正片免费网站| 91在线直播亚洲| 亚洲色图综合久久| 日韩经典中文字幕在线观看| 欧美天天综合色影久久精品| 国产在线精品成人一区二区三区| 成人有码视频在线播放| 欧美大尺度激情区在线播放| 亚洲一二在线观看| 2019日本中文字幕| 亚洲精品mp4| 国产精品99久久久久久久久| 欧美乱人伦中文字幕在线| 欧美亚洲在线播放| 91亚洲精华国产精华| 国产精品专区一| 91香蕉国产在线观看| 亚洲欧美福利视频| 亚洲成人av中文字幕| 欧美成人免费网| 欧美激情视频在线| 亚洲国语精品自产拍在线观看| 成人欧美一区二区三区在线湿哒哒| 亚洲a∨日韩av高清在线观看| 亚洲国产欧美日韩精品| 亚洲美女中文字幕| 91亚洲精华国产精华| 日韩免费观看高清| 国产999精品久久久影片官网| 久久中国妇女中文字幕| 亚洲综合日韩在线| 国产精品无码专区在线观看| 精品国产一区二区在线| 欧美精品久久久久久久久久| 91精品国产乱码久久久久久久久| 在线精品91av| 亚洲成人教育av| 久久这里只有精品视频首页| 国产精品扒开腿做爽爽爽视频| 亚洲天堂免费在线|