欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于JSONP跨域請求原理的深入解析

 更新時間:2022年01月06日 11:50:58   作者:六葉草~  
JSONP(JSON?with?Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題,這篇文章主要給大家介紹了關(guān)于JSONP跨域請求原理的相關(guān)資料,需要的朋友可以參考下

什么是同源策略

同源策略,它是由Netscape提出的一個著名的安全策略?,F(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個策略。

簡單來講,域名,協(xié)議,端口相同。當(dāng)一個瀏覽器的兩個tab頁中分別打開來 百度和谷歌的頁面。當(dāng)瀏覽器的百度tab頁執(zhí)行一個腳本的時候會檢查這個腳本是屬于哪個頁面的,即檢查是否同源,只有和百度同源的腳本才會被執(zhí)行。如果非同源,那么在請求數(shù)據(jù)時,瀏覽器會在控制臺中報一個異常,提示拒絕訪問。

什么是JSONP

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

如何理解上面那句話

我們知道標(biāo)簽中的src屬性既可以請求本地圖片,也可以請求網(wǎng)上資源。也就是說html中的src屬性是支持跨域的。同理jsonp跨域請求也是利用src屬性,只不過用的是標(biāo)簽。

那么我們來舉例看一下:

先寫一個html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <title>jsonp請求資源</title>
    <script type="text/javascript" src="./t10.js"></script>
</body>
</html>

在寫一個js文件:

console.log("我被請求了!");

打開控制臺可以看到:

jsonp實現(xiàn)了本地數(shù)據(jù)的請求,在這里我們模擬了一下本地請求是怎么實現(xiàn)的。

如果請求服務(wù)器的數(shù)據(jù)該是怎樣去實現(xiàn)呢?

了解跨域請求模式:

我們先打開百度的搜索頁面,打開控制臺,點擊Network如下:

然后在頁面輸入一個b:

https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=35105,31660,35239,35457,34584,35245,35480,35499,35329,35316,26350,35475&wd=b&req=2&csor=1&cb=jQuery11020022466709590333256_1639545101298&_=1639545101299

關(guān)鍵字:wd=b

這是回調(diào)函數(shù)

cb=jQuery11020022466709590333256_1639545101298&_=1639545101299

可以看到他的請求方式是GET方式,Jsonp的請求方式默認(rèn)也是GET請求。通過get方式請求服務(wù)器,服務(wù)器返回的數(shù)據(jù)若是json字符串將自動轉(zhuǎn)化為js對象。所以jsonp是需要服務(wù)器端和客戶端相互配合的。

紅色方框是返回的關(guān)鍵字:

可以發(fā)現(xiàn),我們并沒有寫callback方法,jQuery自動幫我們封裝了一個callback方法。我們修改CD為001后發(fā)現(xiàn)它的名字變成了001。

https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=35105,31660,35239,35457,34584,35245,35480,35499,35329,35316,26350,35475&wd=b&req=2&csor=1&cb=001

練習(xí)

獲取請求到的數(shù)據(jù),并將它們顯示出來(百度搜索框)。

做法如下:

可以根據(jù)我們輸入的東西動態(tài)的創(chuàng)建腳本,然后獲取回調(diào)函數(shù)里面的值的函數(shù),然后頁面添加一個列表把它們顯示出來。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../12-5/js/jquery.js"></script>
    <style>
       input {
            width: 540px;
            height: 40px;
            border: 2px solid #4E6EF2;
        }
       li{
            height: 40px;
            width: 411px;
            line-height: 40px;
            font-size: 16px;
            list-style: none;
        } 
    </style>
</head>
<body>
    <img src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png">
   <div>
    <input type="text" value =''>
   </div>
    <ul></ul>
    <script>
    	//
        function getData(data){
            var script = document.querySelector('#jsonp');
            script.parentNode.removeChild(script);
            $('ul').html('');
            for(var i =0;i<data.g.length;i++){
                $('<li>'+data.g[i].q +'</li>').appendTo('ul');//將獲取到的數(shù)據(jù)加入列表
            }
        }
        //動態(tài)生成script腳本
        function getList(wd){
            var script = document.createElement('script');
            script.id = 'jsonp';
            script.src = 'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=26350&req=2&csor=1&cb=getData&wd='+wd;
            document.body.appendChild(script);
        }
		//給input設(shè)置鍵盤事件。
        //實現(xiàn)輸入文本后調(diào)用腳本函數(shù)
        var ipt = document.querySelector('input');
        ipt.addEventListener('keyup',function(){
            var wd = this.value;
            getList(wd);
        })
    </script>
</body>
</html>

jsonp的缺點

  • 只能發(fā)送get請求。因為script只能發(fā)送get請求
  • 需要后臺配合。此種請求方式應(yīng)該前后端配合,將返回結(jié)果包裝成callback(result)的形式。

總結(jié)

到此這篇關(guān)于JSONP跨域請求原理的文章就介紹到這了,更多相關(guān)JSONP跨域請求原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解ES6 Fetch API HTTP請求實用指南

    詳解ES6 Fetch API HTTP請求實用指南

    本次將介紹如何使用Fetch API(ES6 +)對REST API的 HTTP請求,還有一些示例提供給大家便于大家理解。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • javascript實現(xiàn)的圖片預(yù)覽功能

    javascript實現(xiàn)的圖片預(yù)覽功能

    這篇文章主要介紹了javascript實現(xiàn)的圖片預(yù)覽功能,結(jié)合實例形式分析了javascript針對圖片預(yù)覽相關(guān)功能實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2017-03-03
  • javascript中的event loop事件循環(huán)詳解

    javascript中的event loop事件循環(huán)詳解

    這篇文章主要給大家介紹了關(guān)于javascript中event loop事件循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • javascript提取內(nèi)容到作為文章簡介的代碼

    javascript提取內(nèi)容到作為文章簡介的代碼

    javascript提取文本框內(nèi)容到另一個文本框,經(jīng)常被用來做內(nèi)容簡介的讀取,這樣編輯就不用每次都去處理一篇文章的簡介了。
    2011-01-01
  • js數(shù)組去重的hash方法

    js數(shù)組去重的hash方法

    對于JavaScript數(shù)組去除重復(fù)項,現(xiàn)在有多種方法,其中一種是hash,本文主要對hash方法去除js數(shù)組重復(fù)項進(jìn)行介紹,下面就跟小編一起來看下吧
    2016-12-12
  • mock.js模擬數(shù)據(jù)實現(xiàn)前后端分離

    mock.js模擬數(shù)據(jù)實現(xiàn)前后端分離

    這篇文章主要為大家詳細(xì)介紹了mock.js模擬數(shù)據(jù)實現(xiàn)前后端分離,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • js控制滾動條緩慢滾動到頂部實現(xiàn)代碼

    js控制滾動條緩慢滾動到頂部實現(xiàn)代碼

    滾動條緩慢滾動到頂部這樣的效果想必大家在瀏覽網(wǎng)頁的時候都有見過吧,本文使用js實現(xiàn)下,感興趣的你可不要錯過了哈,希望可以幫助到你
    2013-03-03
  • JS運動框架之分享側(cè)邊欄動畫實例

    JS運動框架之分享側(cè)邊欄動畫實例

    這篇文章主要介紹了JS運動框架之分享側(cè)邊欄動畫,實例分析了javascript操作div及css的技巧,需要的朋友可以參考下
    2015-03-03
  • 學(xué)習(xí)JavaScript一定要知道的3個小技巧

    學(xué)習(xí)JavaScript一定要知道的3個小技巧

    這篇文章主要給大家分享的是學(xué)習(xí)JavaScript一定要知道的3個小技巧,通常在 Angular 或 React 項目中,code review 時看到一些老式的 JavaScript 代碼,就會將開發(fā)人員歸類為初學(xué)者,下面我們就來一起看看初學(xué)者需要知道的三個小技巧,需要的朋友可以參考一下
    2021-12-12
  • js canvas實現(xiàn)星空連線背景特效

    js canvas實現(xiàn)星空連線背景特效

    這篇文章主要為大家詳細(xì)介紹了js canvas實現(xiàn)星空連線背景特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論