前後端交互二(jsonp原理及封裝,搭建node服務器創建jsonp接口,jsonp實際運用)

目錄

1.課程目標及知識要點

2.ajax問題

2.1問題重現

2.2瀏覽器同源策略

2.3跨域

2.4不受同源策略影響的資源的引入

3.jsonp

3.1jsonp原理

3.2通過script來實現跨域;

3.3服務端實現

3.4請求百度接口

4.jsonp封裝

5.蘑菇街案例實現

5.1實現動態數據的獲取及渲染

5.2實現滾動底部數據的重新獲取及更新

6.jsonp問題

7.總結


1.課程目標及知識要點

## 課堂目標

  • 掌握jsonp的原理
  • 會搭建node服務器創建jsonp接口
  • 學會封裝jsonp
  • 學會jsonp的實際運用

## 知識要點

  • 跨域解決
  • jsonp原理及封裝
  • jsonp服務器搭建
  • jsonp實際運用

2.ajax問題

2.1問題重現

在非同源下,請求不到接口

示例:在非同源情況下,如使用ajax,在3000端口上,請求4000端口上服務器接口,就會請求不到。

html:

<body>
    <button>發送請求</button>
    <script>
        document.querySelector("button").onclick = function(){
            let xhr = new XMLHttpRequest();
            xhr.open("get","http://localhost:4000/getInfo",true);
            xhr.onload = function(){
                console.log(xhr.responseText);
            };
            xhr.send();
        };
    </script>
</body>

 jsonp3000.js

const Koa = require("koa");
const Router = require("koa-router");
const static = require("koa-static");
const koaBody = require("koa-body");

let app = new Koa();
let router = new Router();
app.use(koaBody());
app.use(static("static"));

router.get("/",(ctx,next)=>{
    ctx.body = "請求成功";
});
router.get("/getInfo",(ctx,next)=>{
    ctx.body = "getInfo請求成功";
});

app.use(router.routes());
app.listen("3000");
 

jsonp4000.js

const Koa = require("koa");
const Router = require("koa-router");
const static = require("koa-static");
const koaBody = require("koa-body");

let app = new Koa();
let router = new Router();
app.use(koaBody());
app.use(static("static"));

router.get("/",(ctx,next)=>{
    ctx.body = "請求成功";
});
router.get("/getInfo",(ctx,next)=>{
    ctx.body = "getInfo請求成功";
});

app.use(router.routes());
app.listen("4000");
 

 在3000端口下訪問http://localhost:3000/jsonp.html進行請求:報以下錯誤

2.2瀏覽器同源策略

  • 同源策略是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權的情況下,不能讀寫對方資源
  • 源 :協議、域名和端口號

2.3跨域

跨域即非同源,非跨域即同源

區分:協議,域名,端口,都相同就是同源,其中有一個不同就是非同源。

2.4不受同源策略影響的資源的引入

以下資源引入不收同源策略影響:

<script src="..."></script>,<img>,<link>,<iframe>

3.jsonp

JSONP*(JSON with Padding)解決跨域問題;可以讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。

3.1jsonp原理

 

3.2通過script來實現跨域;
 

3.3服務端實現

 

3.4請求百度接口

https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=hello&cb=succFn

 

4.jsonp封裝

 

5.蘑菇街案例實現

5.1實現動態數據的獲取及渲染

https://list.mogu.com/search?callback=jQuery2110599693622515429_1558943916971&_version=8193&ratio=3%3A4&cKey=15&page=1&sort=pop&ad=0&fcid=52014&action=food

 

5.2實現滾動底部數據的重新獲取及更新

 

6.jsonp問題

  1. 只能是get請求
  2. 安全性問題

7.總結

  1. - jsonp原理
  2. - jsonp封裝
  3. - 會搭建node服務器創建jsonp接口
  4. - jsonp實際運用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章