Vue 请求 - Fetch

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 请求 - Fetch

目录

Fetch

Fetch-get

格式

示例

准备假数据

请求文件

Fetch-post

格式

示例

Fetch应用

准备数据

请求文件

总结


Fetch

XMLHttpRequest是一个设计粗糙的API,配置和调用方式非常混乱,

而且基于事件的异步模型写起来不友好,兼容性也不好。

Fetch-get

格式

Fetch(路径?参数=值&参数=值).then(res=>res.json()).then(res=>{console.log(res)})

示例
准备假数据

在同级目录下创建json目录,在其中创建test.json文件。

文件内容如下:

{
  "name": "张三",
  "age": 25,
  "address": "北京市昌平区"
}

请求文件

在json目录同级下创建fetch-get.html文件.

内容如下:

<script src="../lib/vue.js"></script>
<div id="box">
    <button @click="handleGet">ajax-fetch-get</button>
</div>
<script>
    let vm = new Vue({
        el:"#box",
        data:{

        },
        methods: {
            handleGet() {
                fetch("./json/test.json")
                    .then(res => {
                        // 状态码, 响应头, 拿不到真正的数据
                        return res.json();
                    })
                    .then(res => {
                        // 输出数据的位置
                        console.log(res)
                    })
                    .catch(err => {
                        // 打印错误信息
                        console.log(err)
                    })
            }
        }
    })
</script>

最后使用网站访问

Fetch-post

格式

与get方式不同,需要设置请求头。

Fetch(路径, {method:’post’, headers:{“Content-Type”:”application/x-www-form-urlencoded”}, body:’name=zhangsan&age=18’}).then(res => res.json()).then(res=>{console.log(res)})

示例

请求示例1

请求数据为字符串,请求头为普通的表单提交。

示例如下:

<script src="../lib/vue.js"></script>
<div id="box">
  <button @click="handlePost">ajax-fetch-post</button>
</div>
<script>
  let vm = new Vue({
    el: "#box",
    data: {},
    methods: {
      handlePost() {
        fetch("./json/test.json", {
          method: "post",
          headers: {
            "Content-Type": "application/x-www-form-urlencoded"
          },
          body: "name=zhangsan&age=18"
        }).then(res => {
          // 状态码, 响应头, 拿不到真正的数据
          return res.json();
        }).then(res => {
          // 输出数据的位置
          console.log(res)
        }).catch(err => {
          // 打印错误信息
          console.log(err)
        })
      }
    }
  })
</script>

请求示例2

请求接口数据,设置请求头为json数据,请求数据必须为json格式。

示例如下:

<script src="../lib/vue.js"></script>
<div id="box">
  <button @click="handlePost">ajax-fetch-post</button>
</div>
<script>
  let vm = new Vue({
    el: "#box",
    data: {},
    methods: {
      handlePost() {
        fetch("./json/test.json", {
          method: "post",
          headers: {
              "Content-Type": "application/json"
          },
          body: JSON.stringify({
            name:"zhangsan",
            age:19
          })
        }).then(res => {
          // 状态码, 响应头, 拿不到真正的数据
          return res.json();
        }).then(res => {
          // 输出数据的位置
          console.log(res)
        }).catch(err => {
          // 打印错误信息
          console.log(err)
        })
      }
    }
  })
</script>

Fetch应用

准备数据

首先找到一个小说网站接口,查看返回数据。

找到网站接口数据 复制下来 并格式化

 

保存到本地ebook.json文件中。

请求文件

创建fetch-ebook.html文件。使用fetch请求本地json文件。

文件内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        li {
            list-style: none;
        }
    </style>
    <script src="../lib/vue.js"></script>
</head>
<body>

<div id="box">
    <button @click="handleRequest">请求</button>
    <ul>
        <li v-for="item in datalist">
            <div>
                <img :src="item.cover" alt="" width="20px">{
   
   {item.title}}
            </div>
        </li>
    </ul>
</div>
<script>
    let vm = new Vue({
        el: "#box",
        data: {
            datalist: []
        },
        methods: {
            handleRequest() {
                fetch("./json/ebook.json")
                    .then(res => {
                        // 状态码, 响应头, 拿不到真正的数据
                        return res.json();
                    })
                    .then(res => {
                        // 赋值给变量
                        this.datalist = res.data.data
                    })
                    .catch(err => {
                        // 打印错误信息
                        console.log(err)
                    })
            }
        }
    })
</script>
</body>
</html>

效果:

点击后,渲染列表

注意:fetch 请求默认是不带cookie的,需要设置fetch(url, {credentials:’include’})

总结

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 请求 - Fetch