class05:axios、跨域

一、js的axios

1. 引入axios

官网:起步 | Axios 中文文档 | Axios 中文网 (axios-http.cn)

axios是封装的原生ajax请求,Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。

其源码可在BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务中查阅,BootCDN 是 极兔云 联合 Bootstrap 中文网 共同支持并维护的前端开源项目免费 CDN 服务,致力于为 Bootstrap、jQuery、React、Vue.js 一样优秀的前端开源项目提供稳定、快速的免费 CDN 加速服务。BootCDN 所收录的开源项目主要同步于 cdnjs 开源项目仓库。

引入:通过script引入axios源码,script的src可以引入网络上的代码:

在html文件的script标签中引入网址:

<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.0.0-alpha.1/axios.js"></script>   // 没有压缩的版本-->
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.0.0-alpha.1/axios.min.js"></script> // 代码压缩版本-->

区别:内存大小不一样空格都被压缩了,空格也是一个字符。

上述axios地址为BootCDN的axios源码网址,也可以使用axios官网的源码网址:

// 使用 unpkg CDN:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
// 使用 jsDelivr CDN:
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

打印输出判断是否引入成功:

<script> console.log(axios) </script>

引入成功:
在这里插入图片描述

2. 使用axios获取网络数据

例:

如中职通api:http://music.zzhitong.com/

如获取数据的地址: music.zzhitong.com/search?keywords=海阔天空

keywords 关键词 => 值 => 根据这个值进行搜索内容

开始使用:

axios({
	method:"get",    //请求方式
	url:"请求数据的地址",
})
//get   一般是用于获取数据的
//post  一般是用于发送数据给后端

通过设置按钮事件打印输出axios:

// app.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>
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/1.0.0-alpha.1/axios.js"></script>    
</head>
<body>
    <button id="r_get">get</button>
    <script>
        r_get.onclick=function(){
            console.log(axios({
                method:"get",
                url:"http://music.zzhitong.com/search?keywords=海阔天空", // 请求数据的地址
            }));
        }
    </script>
</body>
</html>

在这里插入图片描述
打印输出得到Promise,Promise在下一节讲解。

可以通过promise的**.then**的回调函数获取数据:

r_get.onclick=function(){
    axios({
        method:"get",
        url:"http://music.zzhitong.com/search?keywords=海阔天空", // 请求数据的地址
    }).then((res)=>{
        console.log(res);
    });
}

在这里插入图片描述

二、Promise

Promise 对象用于表示一个异步操作的最终完成(或失败)及其结果值。

promise通过new启动,传入一个回调函数callback,该回调函数有两个形参,分别是resolve()成功函数和reject()失败函数,promise的成功或失败是由编程人员定义的。

打印输出promise:

<script>
    let promise = new Promise((resolve, reject)=>{

    });
    console.log(promise);
</script>

输出与上图中的axios的输出相同,都为promise,这是因为axios 里面封装了 promise:
在这里插入图片描述

js中的异步有 :ajax,定时器,事件, promise的.then 等;

promise 用来处理异步,方便我们获取数据。

promise 有三个状态:等待状态pending、成功状态resolve、失败状态reject;默认为等待状态。

三、跨域

1.跨域错误

<script>
        axios({
            method:"get",
            url:"http://www.axios-js.com/zh-cn/docs/",
        }).then(result=>{
            console.log(result);
        })
</script>

在这里插入图片描述

错误原因: 我们开启的本地网络地址为:http://localhost:3000/,根据同源策略,协议(https,http ),域名 (www.xxx.com),端口(默认80)三者完全相同才能进行访问。

示例: 下表给出了与 URL http://store.company.com/dir/page.html 的源进行对比的示例:
在这里插入图片描述

2. 设置跨域

设置跨域一般由后端设置。

解决跨域错误,只需要在后端配置服务时设置响应头即可。

// res.setHeader  设置响应头
// "Access-Control-Allow-Origin","*"  允许任何人访问该数据
res.setHeader("Access-Control-Allow-Origin", "*");

创建服务器应用,模拟cors错误,设置跨域。

后端app.js:

const http = require('http');   //引入http模块,用于创建服务器应用

// 创建服务器应用
let serve = http.createServer((req, res) => {
    // req 前端发送给后端的内容
    // res 后端发送给前端的内容

    // console.log(req.url); //  req.url 获取前端请求的地址

    // res.setHeader  设置响应头
    // "Access-Control-Allow-Origin","*"  允许任何人访问该数据
    res.setHeader("Access-Control-Allow-Origin", "*");

    if (req.url == "/cors_test") {
        res.end("若非群玉山头见,会向瑶台月下逢。")
    }

});

// 启动监听端口号,我们应用运行的地址
serve.listen("3000", () => {
    console.log("开启3000端口服务")
});

前端发起请求app.html:

<body>
	<button id="test">get请求</button>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        test.onclick = function () {
            axios({
                method: "get",
                url: "http://localhost:3000/cors_test",
                // 获取数据的地址  请求数据的地址   不是文件的地址
            }).then(result => {
                console.log(result.data)
            })
        }
    </script>
</body >

访问结果:

在这里插入图片描述

若未设置跨域,即没有代码:

res.setHeader("Access-Control-Allow-Origin", "*");

则显示跨域错误:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laker 23

要秃啦,支持一下嘛~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值