15 axios跟后端交互

1 fetch和axios

axios与fetch实现数据请求

(1)fetch(不是所有浏览器都支持,谷歌浏览器支持)
XMLHttpRequest 是一个设计粗糙的 API,配置和调用方式非常混乱,而且基于事件的异步模型写起来不友好。 兼容性不好

2 axios的引入

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

3 axios的简单使用

axios.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跟后端交互</title>
    <script src="./js/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="box">
<button @click="handleClick">点我看美女</button>
    <br>
    我的名字是:{{name}}
    <br>
    我的年龄是:{{age}}
</div>
</body>
<script>
    let vm = new Vue({
        el: '#box',
        data: {
            name:'',
            age:0
        },
        methods:{
            handleClick(){
                // 会出跨域问题
                axios.get('http://127.0.0.1:5000/').then(res=>{
                    console.log(res.data)
                    this.name=res.data.name
                    this.age=res.data.age
                })
                //
            }
        }

    })

</script>
</html>

backend.py

# -*- coding: utf-8 -*-
# @Time    : 2021/12/28 20:35
# @Author  : dzg
from flask import Flask, jsonify, make_response

app = Flask(__name__)


@app.route('/')
def index():
    obj = make_response(jsonify({"name": "dzg", "age": "18"}))
    obj.headers['Access-Control-Allow-Origin'] = '*'
    return obj


if __name__ == '__main__':
    app.run()

 

 

 

 

4 axios发送get请求

axios.get(url, { params: param })
                //成功返回
                .then(response => {
                    console.log(response);
                })
                //失败返回
                .catch(error => {
                    console.log(error);
                })


 

 

5 axios发送post请求

5.1 'Content-Type': 'multipart/form-data'

axios.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跟后端交互</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="box">
    <button @click="handleClick">axios发送post请求</button>

</div>
</body>
<script>
    let vm = new Vue({
        el: '#box',
        data: {
            name: '',
            age: ''
        },
        methods: {
            handleClick() {
                let params = new FormData()
                params.append('name', 'dzg')
                params.append('age', '18')
                axios.post('http://127.0.0.1:5000/', params, {"headers": {'Content-Type': 'multipart/form-data'}}).then(res => {
                    console.log(res.data)

                }).catch(error => {
                    console.log(error)
                })

            }
        }

    })

</script>
</html>

 

 backend.py

# -*- coding: utf-8 -*-
# @Time    : 2021/12/28 20:35
# @Author  : dzg
from flask import Flask, jsonify, make_response, request
from flask_cors import CORS

app = Flask(__name__)

CORS(app, resource='/*')


@app.route('/', methods=['POST'])
def index():
    print(request.form)
    print(request.form.to_dict())

    return 'ok'


if __name__ == '__main__':
    app.run()

 

 

5.2 'Content-Type': 'application/json'

axios.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跟后端交互</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="box">
    <button @click="handleClick">axios发送post请求</button>

</div>
</body>
<script>
    let vm = new Vue({
        el: '#box',
        data: {
            name: '',
            age: ''
        },
        methods: {
            handleClick() {

                axios.post('http://127.0.0.1:5000/', {name:'dzg',age:18}).then(res => {
                    console.log(res.data)

                }).catch(error => {
                    console.log(error)
                })

            }
        }

    })

</script>
</html>

 

 backend.py

# -*- coding: utf-8 -*-
# @Time    : 2021/12/28 20:35
# @Author  : dzg
from flask import Flask, jsonify, make_response, request
from flask_cors import CORS

app = Flask(__name__)

CORS(app, resource='/*')


@app.route('/', methods=['POST'])
def index():

    print(request.data)


    return 'ok'


if __name__ == '__main__':
    app.run()

 

 跟后端交互的三种方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
<!--    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>-->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>
<body>
<div class="app">

<!--    <h1>我的名字是:{{name}}</h1>-->
<!--    <h1>我的年龄是:{{age}}</h1>-->

<div v-for="data in data_list">
    <h1>电影名为:{{data.name}}</h1>
    <h2>导演:{{data.director}}</h2>
    <img :src="data.poster" alt="">

</div>

</div>
</body>
<script>
    var vm = new Vue({
        el: '.app',
        data: {
            name: '',
            age: '',
            data_list:[]
        },
        // created() {
        //     // 发送ajax请求,正常来讲,需要使用js向后端发送请求
        //     // 原生js写的ajax,非常麻烦,还要处理浏览器兼容
        //     // 于是 jquery,封装了一个ajax函数,方便咱们使用
        //     //CORS:面试重点,跨域问题
        //     $.ajax({
        //         url: 'http://127.0.0.1:5000/',
        //         type: 'get',
        //         success: data=> {
        //             console.log(data)
        //             this.name=data.name
        //             this.age=data.age
        //         }
        //     })
        // }


        // created() {
        //    // fetch:新的ajax,原生js支持的
        //     fetch('http://127.0.0.1:5000/').then(res => res.json()).then(res=>{
        //         // console.log(res)
        //         this.name=res.name
        //         this.age=res.age
        //     })
        // }

        created(){
            // axios:第三方
            axios.get('http://127.0.0.1:5000/').then(res=>{
                console.log(res.data) //需要从res.data中取出后台给的数据
                this.data_list=res.data.data.films
            })

        }

    })
</script>
</html>

 s1.py(flask写的,需要pip install flask)

from flask import Flask, jsonify
import json

app = Flask(__name__)


@app.route('/')
def home():
    with open('data.json', 'r', encoding='utf-8') as f:
        data_res = json.load(f)

    res = jsonify(data_res)
    # 解决跨域
    res.headers['Access-Control-Allow-Origin'] = '*'
    return res


if __name__ == '__main__':
    app.run()

 

posted @ 2022-02-11 23:18  甜甜de微笑  阅读(121)  评论(0编辑  收藏  举报