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

首頁 > 開發 > AJAX > 正文

Ajax jsonp如何實現跨域請求

2024-09-01 08:30:32
字體:
來源:轉載
供稿:網友

跨域請求就是實現不同服務器之間通信的效果,但是你知道Ajax jsonp如何實現跨域請求嗎?相信這個問題難倒了不少的小伙伴們,那么接下來我們就去看看具體的實現方法吧。

什么是跨域?

簡單的來說,出于安全方面的考慮,頁面中的JavaScript無法訪問其他服務器上的數據,即“同源策略”。而跨域就是通過某些手段來繞過同源策略限制,實現不同服務器之間通信的效果。

具體策略限制情況可看下表:

?

URL 說明 允許通信
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下 允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同文件夾 允許
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同端口 不允許
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同協議 不允許
http://www.a.com/a.js
http://127.0.0.100/b.js
域名和域名對應ip 不允許
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同 不允許
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二級域名(同上) 不允許
http://www.a.com/a.js
http://www.b.com/b.js
不同域名 不允許

什么是JSONP?

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,而JSONP(JSON with Padding)則是JSON 的一種“使用模式”,通過這種模式可以實現數據的跨域獲取。

JSONP跨域的原理

在同源策略下,在某個服務器下的頁面是無法獲取到該服務器以外的數據的,但img、iframe、script等標簽是個例外,這些標簽可以通過src屬性請求到其他服務器上的數據。利用script標簽的開放策略,我們可以實現跨域請求數據,當然,也需要服務端的配合。當我們正常地請求一個JSON數據的時候,服務端返回的是一串JSON類型的數據,而我們使用JSONP模式來請求數據的時候,服務端返回的是一段可執行的JavaScript代碼。

跨域: js有一個同源限制,簡單說來源不一樣的話就無法相互間交互.那么怎么算來源不一樣呢, 舉個例子:瀏覽器訪問-->服務器A--->得到頁面A---頁面A中的js腳本只能訪問服務器A的資源(相同域名和端口,此外域名與對應的ip也算不同源,要么都域名,要么都ip).

以上就是js的跨域問題,但是這里需要注意一點的是服務器A是沒有跨域的問題的,這個只有js存在這個問題,也就是說: 頁面A中js-->服務器A--->跨域資源,這個路徑是可以.只有 頁面A中的js--->跨域資源,這個路徑是不行的.

然后說一下解決方案中的jsonp,這個不是一種格式,而是一種解決方案.

jsonp的原理:js雖然有同源限制,但是引入js文件的時候卻沒有這個限制,也就是說:

<script type="text/javascript" src="xxx/xxxx.js"></script>

其中src屬性引入js文件的時候是沒有同源限制的,此時是可以引入域外資源的.jsonp的原理就在這里,通過動態的創建一個以上那行js引入語句,通過其src屬性訪問域外資源.而域外資源服務器只要返回一個能被解析為js語句的字符串即可達到返回結果的目的,形如:

callback({"key":"value",...}) 

其中callback是需要事先約定的名字,綠字部分為要返回到json字符串,然后拼接成以上那種形式直接返回即可.這樣頁面中的js從服務端接收到這個拼接的字符串后,就會直接執行本地的名為callback的js方法,這也就是為何callback這個需要事先約定的原因,需要保證頁面側要存在這個js方法,這個方法傳入的參數就為服務器側的返回值.

ajax是支持jsonp的,所以以上那些麻煩事情都會替我們做,寫法如下:

$.ajax({     type: 'GET',     url: "http://127.0.0.1:8080/xxx/xxx",     async: false,     dataType: "jsonp",     jsonp: "callback",     success: function(result){       .....     },     timeout:3000   });

紅字部分標識我們使用jsonp的方式調用,實際上此時這個已經不是傳統意義上的ajax的get請求了,它的真實實現方式就是我們上文中說的那樣.其中紅字部分的callback為我們要和服務器端進行溝通的部分,這個請求發送到服務器端,實際上這樣的:

http://127.0.0.1:8080/xxx/xxx?callback=jqueryxxxx

服務器端需要通過callback來取值(類似用request.getParameter("callback")),也就是取后面的jqueryxxxx等自動生成的值,這個值實際上就是對應的我們發送請求的ajax方法中的success回調方法,服務器端如果返回

jqueryxxxx({"ret":"ok"})

頁面中會自動執行success方法,且將{"ret":"ok"}傳給success方法的參數result.

以上就是ajax通過jsonp的方式實現跨域訪問的過程.可以看出基本不用我們做什么額外操作,全都封裝好了.

ps:在jQuery中如何通過JSONP來跨域獲取數據

第一種方法是在ajax函數中設置dataType為'jsonp':?

$.ajax({    dataType: 'jsonp',    url: 'http://www.a.com/user?id=123',    success: function(data){        //處理data數據    }});

第二種方法是利用getJSON來實現,只要在地址中加上callback=?參數即可:?

$.getJSON('http://www.a.com/user?id=123&callback=?', function(data){    //處理data數據});

也可以簡單地使用getScript方法:

//此時也可以在函數外定義foo方法function foo(data){    //處理data數據}$.getJSON('http://www.a.com/user?id=123&callback=foo');

JSONP的應用

JSONP在開放API中可以起到非常重要的作用,開放API是運用在開發者自己的應用上,而許多應用往往是在開發者的服務器上而不是在新浪微博的服務器上,因此跨域請求數據成為開發者們所需要解決的一大問題,廣大開放平臺應該實現對JSONP的支持,這一點新浪微博開放平臺便做的非常好(雖然某些API里沒有說明,但實際上是可以使用JSONP方式調用的)。

以上就是關于Ajax jsonp如何實現跨域請求的內容,如果您想要學習更多技巧的話,錯新技術頻道小編會在這里繼續給大家分享。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91九色国产在线| 国产亚洲美女久久| 欧美日韩国产综合视频在线观看中文| 久久91亚洲精品中文字幕| 欧美国产日韩在线| 日韩视频在线一区| 成人精品网站在线观看| 国产专区精品视频| 日韩免费不卡av| 97婷婷涩涩精品一区| 亚洲美女在线视频| 欧美午夜片在线免费观看| 欧美理论在线观看| 国产深夜精品福利| 亚洲大胆人体在线| 91成人免费观看网站| 亚洲的天堂在线中文字幕| 蜜臀久久99精品久久久无需会员| 亚洲欧美三级伦理| 亚洲欧美999| 亚洲精品91美女久久久久久久| 中文字幕亚洲一区在线观看| 精品久久久一区二区| 欧美日韩亚洲系列| 粗暴蹂躏中文一区二区三区| 精品久久久视频| 中文字幕精品—区二区| 久久精品久久精品亚洲人| 久久人人爽国产| 欧美另类69精品久久久久9999| 久久久精品电影| 伊人久久久久久久久久久| 亚洲精品国产精品国自产在线| 亚洲aⅴ日韩av电影在线观看| 亚洲国产99精品国自产| 亚洲最大中文字幕| 久久频这里精品99香蕉| 欧美成人午夜剧场免费观看| 色yeye香蕉凹凸一区二区av| 色妞在线综合亚洲欧美| 国产v综合ⅴ日韩v欧美大片| 欧美性理论片在线观看片免费| 亚洲精品一区在线观看香蕉| 国产精品成av人在线视午夜片| 日韩欧美一区二区三区| 一区二区中文字幕| 91久久精品国产91久久| 欧美人与性动交| 性欧美亚洲xxxx乳在线观看| 97热在线精品视频在线观看| 欧美—级高清免费播放| 久久久久久久香蕉网| 性亚洲最疯狂xxxx高清| 国产成人精品av在线| 久久久久久久999| 国产精品一区二区久久精品| 欧洲成人免费视频| 成人免费视频网址| 欧美肥老妇视频| 国产精品视频专区| 国产精品久久久久久av下载红粉| 国产精品第10页| 91天堂在线观看| 亚洲国产日韩欧美综合久久| 欧美夫妻性生活视频| 亚洲一区二区自拍| 欧美激情视频在线观看| 亚洲国产高清福利视频| 亚洲色图25p| 精品久久久久久久大神国产| 97精品一区二区视频在线观看| 国产精品一区二区三区在线播放| 91av视频导航| 不卡中文字幕av| 久久91精品国产| 亚洲福利在线播放| 亚洲国产另类 国产精品国产免费| 国产视频观看一区| 91免费视频网站| 国产精品igao视频| 亚洲伊人久久大香线蕉av| 久久亚洲欧美日韩精品专区| 欧美性xxxxhd| 国产精品入口尤物| 国内久久久精品| 国产视频综合在线| 亚洲欧美日韩精品久久亚洲区| 国外成人性视频| 最近2019年手机中文字幕| 97色在线视频| 91免费精品视频| 欧美成人午夜激情| 亚洲国产精品人人爽夜夜爽| 亚洲精品成人av| 精品久久久国产精品999| 国语自产精品视频在线看一大j8| 色综合久久88| 亚洲视频axxx| 亚洲人午夜色婷婷| 一个人www欧美| 一区二区三区视频观看| 国产精品丝袜久久久久久高清| 精品免费在线观看| 国产一区二区三区视频在线观看| 亚洲影院污污.| 亚洲一区二区在线| 久久久久久久久久国产精品| 国产黑人绿帽在线第一区| 国产精品免费久久久久影院| 欧美国产精品日韩| 国产成人精品av在线| 亚洲高清福利视频| 日韩精品视频在线播放| 日本精品久久久久久久| 久久久久久久久91| 亚洲国产成人精品女人久久久| 国产精品美女主播| 国模视频一区二区| 亚洲人成电影在线| www.久久色.com| 91久久在线观看| 中文字幕日韩专区| 国产精品旅馆在线| 美女撒尿一区二区三区| 国产精品免费久久久久影院| 亚洲毛茸茸少妇高潮呻吟| 亚洲在线观看视频网站| 久久亚洲电影天堂| 日韩精品一区二区三区第95| 成人精品福利视频| 亚洲欧美综合区自拍另类| 91国产一区在线| 亚洲精品久久久一区二区三区| 国外成人性视频| 成人动漫网站在线观看| 国产精品成人播放| 欧美黑人xxxⅹ高潮交| 日日噜噜噜夜夜爽亚洲精品| 国产精品福利片| 国产精品都在这里| 8x海外华人永久免费日韩内陆视频| 久久久天堂国产精品女人| xvideos成人免费中文版| 久久黄色av网站| 成人a视频在线观看| 国产精品中文久久久久久久| 欧美香蕉大胸在线视频观看| 黑人狂躁日本妞一区二区三区| 欧美激情精品久久久久久免费印度| 性欧美办公室18xxxxhd| 国产午夜一区二区| 久久久久国色av免费观看性色| 亚洲精品久久在线| 国产999在线观看| 亚洲摸下面视频| 日本国产高清不卡| 久久久国产精品亚洲一区| 日韩av中文在线| 美女av一区二区三区| 日韩大陆毛片av| 国产精品一区二区在线| 亚洲视频777| 欧美激情视频网站| 成人免费在线视频网站|