最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ajax和jsonp跨域的原理本質(zhì)詳解

 更新時間:2017年11月29日 09:59:05   作者:苗澤云  
跨域問題是我們在開發(fā)中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于ajax和jsonp跨域的原理本質(zhì),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

為什么會有跨域問題? - 因為有同源策略

同源策略是瀏覽器的一種安全策略,所謂同源指的是 請求URL地址中的 協(xié)議, 域名 和 端口 都相同,只要其中之一不相同就是跨域

同源策略主要為了保證瀏覽器的安全性

在同源策略下,瀏覽器 不允許 Ajax跨域獲取服務(wù)器數(shù)據(jù)

http://www.example.com/detail.html

跨域請求:

  • http://api.example.com/detail.html 域名不同
  • http://www.example.com:8080/detail.html 端口不同
  • http://api.example.com:8080/detail.html 域名、端口不同
  • https://api.example.com/detail.html 協(xié)議、域名不同
  • https://www.example.com:8080/detail.html 端口、協(xié)議不同

ajax的基本概念

了解這個概念,首先得先知道同步交互與異步交互

  • 同步交互:客戶端瀏覽器給服務(wù)器發(fā)送一個請求,服務(wù)器返回一個頁面,返回的頁面會把之前的頁面覆蓋掉,我們把這種交互方式稱為同步交互
  • 異步交互:就是可會斷瀏覽器給服務(wù)器發(fā)送一個請求,服務(wù)器返回數(shù)據(jù),返回的數(shù)據(jù)不會把之前的頁面覆蓋掉,我們把這種交互方式稱之為異步交互

ajax主要的應(yīng)用場景:頁面不刷新,就可以與服務(wù)器進行動態(tài)的數(shù)據(jù)交互

交互的原理

  • 同步交互原理:我們在瀏覽器,怎么給服務(wù)器發(fā)送請求呢?可以點擊超鏈接,提交表單,瀏覽器地址欄輸入地址,都是給服務(wù)器發(fā)送請求,實際上是瀏覽器幫助我們給服務(wù)器去發(fā)送請求
  • 異步交互的原理:JavaScript給我們提供了一個新的API接口,幫我們?nèi)グl(fā)送http請求,由XMLHttpRequest 對象來幫助我們發(fā)送請求

我們所有的交互操作都可以通過這個對象來完成,發(fā)送請求,接受服務(wù)器的數(shù)據(jù)

ajax的具體應(yīng)用場景

  • 前臺可以通過XMLHttpRequest 給服務(wù)器發(fā)送請求,然后再通過XMLHttpRequest 對象來接受服務(wù)器返回的數(shù)據(jù),最后通過dom操作把數(shù)據(jù)寫到頁面上
  • ajax:可以用來表單輸入規(guī)范驗證
  • ajax:也可以用來做性能優(yōu)化,比如一個頁面非常龐大,這個頁面不可能一次加載完畢,實現(xiàn)一個滾動加載

XMLHttpRequest 交互的四個步驟

      1,實例化XMLHttpRequest 對象

      2,想和服務(wù)器進行交互,必須和服務(wù)器打開一個連接

      3,給服務(wù)器發(fā)送數(shù)據(jù),發(fā)送參數(shù)數(shù)據(jù)到服務(wù)器

      4,接受服務(wù)器返回的數(shù)據(jù),服務(wù)器在返回給客戶端的時候會返回一些狀態(tài),可以通過監(jiān)聽服務(wù)器狀態(tài)的改變,來更好的操控整個交互流程

ajax跨域

跨域:假設(shè)我訪問 a 站點,后臺返回給我一個頁面,然后我又想在 a 站點的這個頁面去訪問 b 站點的資源,這就是一個跨域的效果,跨域瀏覽器是有安全限制的

解決·跨域的方式:jsonp方式

JSONP 全稱是 JSON with Padding ,是基于 JSON 格式的為解決跨域請求資源而產(chǎn)生的解決方案。他實現(xiàn)的基本原理是利用了 HTML 里 <script></script> 元素標(biāo)簽,遠(yuǎn)程調(diào)用 JSON 文件來實現(xiàn)數(shù)據(jù)傳遞。如要在 a.com 域下獲取存在 b.com 的 JSON 數(shù)據(jù)( getUsers.JSON ):

jsonp解決跨域的本質(zhì)原理:由于瀏覽器有同源限制,不同站點之間不能相互訪問,但是有時候我們就是想要獲取其他站點的數(shù)據(jù),比如加入我們想要獲取一下急速數(shù)據(jù)的天氣預(yù)報數(shù)據(jù),這肯定跨域了,那么我們該怎么辦呢?

原理:就是動態(tài)創(chuàng)建<script>標(biāo)簽,然后利用<script>的src 不受同源策略約束來跨域獲取數(shù)據(jù)。

這樣在后臺就可以獲取到前臺傳過來的那個回調(diào)函數(shù),,最后后臺返回這個函數(shù)的調(diào)用,參數(shù)為前臺請求的數(shù)據(jù)

js代碼

<script type="text/javascript">
 function handleResponse(response){
   console.log(response);
 }
</script>

<script type="text/javascript">
 window.onload = function() {

 var oBtn = document.getElementById('btn');

 oBtn.onclick = function() { 

  var script = document.createElement("script");
  script.src = "https://api.douban.com/v2/book/search?q=javascript&count=1&callback=handleResponse";
  document.body.insertBefore(script, document.body.firstChild); 
 };
};
</script>

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

达孜县| 麟游县| 夹江县| 德庆县| 商都县| 平安县| 宜宾县| 资中县| 峡江县| 田东县| 庐江县| 龙山县| 远安县| 伊川县| 获嘉县| 静安区| 桐乡市| 元阳县| 巴南区| 北碚区| 东乡县| 宜丰县| 昆明市| 石嘴山市| 英吉沙县| 綦江县| 策勒县| 博兴县| 灵川县| 石狮市| 志丹县| 平果县| 乌拉特中旗| 渝北区| 张掖市| 宁化县| 阳朔县| 大城县| 汝阳县| 肇东市| 芦溪县|