前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Vue_03】前后端交互

【Vue_03】前后端交互

作者头像
用户8250147
发布2021-02-04 14:45:41
9570
发布2021-02-04 14:45:41
举报
文章被收录于专栏:黑马黑马

一、Promise

1. Promise的基本使用
代码语言:javascript
复制
<script>
	var p = new Pormise(function(resolve, reject) {
	     // 这里实现异步调用
	
	     // 调用成功
	     resolve("success");
	
	     // 调用失败
	     reject("error");
	 });
	
	 p.then(function(data) {
	     // 成功的情况
	 },function(info) {
	     // 失败的情况
	 });
</script>   
2. 基于Promise发送Ajax请求
代码语言:javascript
复制
<script>
    function request(url) {
        // 创建一个 Promise 实例
        var p = new Pormise(function(resolve, reject) {
            // 获取与后台交换数据的对象 XMLHttpRequest
            var xhr = new XMLHttpRequest();

            /* 
                - readyState 改变时触发 onreadystatechange 事件
                - readyState: XMLHttp 请求的当前状态
                    0: 请求未初始化
                    1: 服务器连接已建立
                    2: 请求已接收
                    3: 请求处理中
                    4: 请求已完成,且响应已就绪
                - status:响应状态码
                    200: "OK"
                    404: 未找到页面
            */
            xhr.onreadystatechange =  function() {
                if(xhr.readyState != 4) {
                    return ;
                }
                
                if(xhr.readyState == 4 && xhr.status == 200) {
                    // 请求成功的情况,通过 responseText 属性来获取由服务器返回的数据
                    resolve(xhr.responseText);
                } else {
                    // 处理请求失败
                    reject("请求失败");
                }
            }
            
            /* 
                初始化一个请求
                open(method, url, async, username, password)
                    method: 请求方式
                    url: 请求的地址
                    async: 请求是否异步,默认异步
                    userrname、password: 可选,为 url 的授权提供认证
            */
            xhr.open("get", url);

            /* 
                发送 http 请求
                send(参数可选)
                    null: 代表只有 url 没有数据体。例如:get 请求
                    数据体:除了请求头信息还包含具体数据的数据体。例如:post请求
            */
            xhr.send(null);
        });

        // 返会 Promise 实例
        return p;
    }

    // 请求数据
    request("http://localhost/first/data").then(
        function(data) {    // 参数1:处理请求成功的方法
            console.log(data);
        },function(info) {  // 参数2:处理请求失败的方法,可以省略
            console.log(info);
        }
    );
</script>      
3. Promise的常用API
  • 实例方法 then(方法 1, 方法 2) :方法 1 处理异步正常的数据,方法 2 处理异步失败(可以不写), 链式编程时需要在上一个 then 中使用 return catch(方法) :处理异步失败,与 .then 的方法 2 效果一致 finally(方法) :无论如何最后都会执行的方法
  • 静态方法 all(数组) :接收一个数组,每个数组元素都是一个 Promise 实例,当这个数组中的 Promise 实例全部返回时,方法执行结束 race(数组) : 接收一个数组,每个数组元素都是一个 Promise 实例,当这个数组中的 Promise 实例有一个返回时,方法执行结束

二、fetch

Fetch 是新的 Ajax 的解决方案,会返回一个 Promise Fetch 不是 Ajax 的进一步封装,而是原生 JS ,没有使用 XMLHttpRequest

1. fetch的基本使用
代码语言:javascript
复制
<script>
	// fetch的参数为请求的路径,默认为 get 请求
    fetch("url")
    .then(
    	function(data) {  // 成功返回的 data 是一个 Promise 实例,不能直接拿到数据
    		// 需要使用 fetch 的方法 text() 取出数据
    		data.text();
    	},function(info) { // 失败返回的 info 我们可以直接拿到数据
    	}
    );
</script>
2. fetch的Http请求

get/delete

post/put

3. fetch的响应格式

data.json() : 将返回的数据转为 json data.text() : 将返回数据转为字符串

三、axios

1. axios的基本使用

get /delete请求

post/put请求

2. axios全局配置

配置公共的请求头,配置之后再 url 中可以省略公共的请求头 axios.defaults.baseURL = 'http://localhost/test'; —————————— 配置超时时间 axios.defaults.timeout = 3000; —————————— 配置公共的 post 的 Content-Type axios.defaults.headers.post['Content-Type'] = 'application/json';

3. axios拦截器

拦截器分类

1.请求拦截器 请求拦截器的作用是在请求发送前进行一些操作。 2.响应拦截器 响应拦截器的作用是在接收到响应后进行一些操作。

请求拦截器

响应拦截器

四、ES7新方法 (async/await)

async 作为一个关键字放到方法前面 async 都会隐式的返回一个 Promise 实例 await 只能在 async 修饰的方法内使用,且 await 不能单独使用 await 后可以跟一个 Promise 实例

代码语言:javascript
复制
<script>
	// 配置公共的请求头
    axios.defaults.baseURL="http://localhost/test";

    async function request() {
        // 添加 await 之后,当前 await 返回结果之后才会执行下面的代码
        var info = await.get("data1");
        var ret = await axios.get("data2?info=" + info.data);
        return ret.data;
    }

    request().then(function(data){
        console.log(data);
    });
</script>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Promise
    • 1. Promise的基本使用
      • 2. 基于Promise发送Ajax请求
        • 3. Promise的常用API
        • 二、fetch
          • 1. fetch的基本使用
            • 2. fetch的Http请求
              • 3. fetch的响应格式
              • 三、axios
                • 1. axios的基本使用
                  • 2. axios全局配置
                    • 3. axios拦截器
                    • 四、ES7新方法 (async/await)
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档