首页 > 其他分享 >【补充】前后端交互的三种方式

【补充】前后端交互的三种方式

时间:2023-08-06 22:45:43浏览次数:32  
标签:username __ 请求 res age 前后 data 三种 交互

【补充】前后端交互的三种方式

  • 前后端要打通----》从前端发送ajax---》核心:使用js发送http请求,接收返回
    • 使用原生 JavaScript 发送 Ajax 请求
      • 这是一种传统的方式,通过使用 JavaScript 的 XMLHttpRequest 对象来发送和接收数据。
      • 开发者需要手动处理请求和响应的各个阶段,包括请求参数的拼装、请求头的设置、监听响应事件等。
      • 尽管这种方法具有灵活性,但是编写和维护复杂度较高,需要考虑不同浏览器的兼容性问题。
    • 使用 jQuery 的 Ajax 方法
      • jQuery 提供了方便的 $.ajax() 方法,封装了原生的 XMLHttpRequest 对象,简化了开发者的操作流程。
      • 它支持跨浏览器兼容性,并提供了丰富的功能选项,如设置请求类型、请求头、处理错误等。
      • 然而,由于现代前端框架(如 Vue.js)一般不推荐使用 jQuery,因此在与这些框架结合使用时可能不太适合。
    • 使用第三方库(如 Axios 或 Fetch)
      • 第三方库如 Axios 和 Fetch 提供更简洁、易用且功能强大的方式来发送 Ajax 请求。
      • 它们以 Promise 或 async/await 为基础,使得异步请求代码更加清晰和易于维护。
      • Axios 是一个流行的第三方库,广泛应用于前端项目中。
      • 同时,原生的 Fetch API 也是一种现代的标准方式,但需要注意兼容性问题
    • fetch: 原生js发送ajax请求,有的浏览器也不兼容

【1】使用jQuery的Ajax

  • 后端
# flask框架构建后端入口
from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/')
def index():
    res = jsonify({"username": 'dream', "age": 20})
    # 前后端分离后,一定会出跨域---》后面要解决的重点
    # 在响应头中加入:Access-Control-Allow-Origin ,就就可以解决跨域
    res.headers = {'Access-Control-Allow-Origin': '*'}

    return res


if __name__ == '__main__':
    app.run()
  • 前端
<body>
<div id="app">

    <button @click="load">点我加载数据</button>
    <br>
    姓名::>>{{username}}
    <br>
    年龄::>>{{age}}
</div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            username: "",
            age: "",
        },
        methods: {
            load() {
                // (1)后端交互方式一 : jQuery的Ajax
                // 请求发送成功,后端执行了,但是被浏览器拦截了,因为有跨域问题
                // 当前地址,如果向非浏览器地址栏中得地址发送请求,就会出现跨域
                var _this = this
                $.ajax({
                    url: 'http://127.0.0.1:5000',
                    type: 'get',
                    success: function (data) {
                        data = JSON.parse(data)
                        _this.username = data.username
                        _this.age = data.age
                    }
                })
            },
        }
    })
</script>

【2】使用JS原生的fetch

<body>
<div id="app">

    <button @click="load">点我加载数据</button>
    <br>
    姓名::>>{{username}}
    <br>
    年龄::>>{{age}}
</div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            username: "",
            age: "",
        },
        methods: {
            load() {
                // 2 使用js原生的fetch(目前也不用)
                // fetch('http://127.0.0.1:5000').then(function (response) {
                //     // console.log(response)
                //     return response.json();
                // }).then(function (res) {
                //     console.log(res);
                // });
                
                fetch('http://127.0.0.1:5000').then(res => res.json()).then(res => {
                    console.log(res)
                })
            }
        }
    })
</script>

【3】使用axios

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <!-- Vue 的 JS 文件 -->
    <script src="vue.min.js"></script>

    <!--  CDN 链接 引入方法  -->
    <!--  jQuery 文件  -->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.0/jquery.min.js">//jQuery</script>
    <!--  Bootstrap 的 CSS 样式文件  -->
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
    <!--  Bootstrap 的 JS 文件 (动画效果需要jQuery)  -->
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js">// bootstrap </script>
    <!--  Vue 文件  -->
    <!--    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.9/vue.min.js"></script>-->
    <!--  axios 文件  -->
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.min.js"></script>

    <!--  以下为 css样式书写区  -->
    <style>


    </style>

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

    <button @click="load">点我加载数据</button>
    <br>
    姓名::>>{{username}}
    <br>
    年龄::>>{{age}}
</div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            username: "",
            age: "",
        },
        methods: {
            load() {
                // 使用axios(以后用这个)
                var _this = this
                axios.get('http://127.0.0.1:5000').then(function (res) {
                    console.log(res.data)
                    _this.username = res.data.username
                    _this.age = res.data.age
                })
            }
        }
    })
</script>
</html>

标签:username,__,请求,res,age,前后,data,三种,交互
From: https://www.cnblogs.com/dream-ze/p/17610262.html

相关文章

  • FreeSWITCH添加自定义endpoint之媒体交互
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9 之前写过FreeSWITCH添加自定义endpoint的文章:https://www.cnblogs.com/MikeZhang/p/fsAddEndpoint20230528.html今天记录下endpoint媒体交互的过程并提供示例代码及相关资源下载,本文涉及示例代码和资源可从如下渠道获取:关......
  • Spring Boot&Vue3前后端分离实战wiki知识库系统<十一>--文档管理功能开发三
    文档内容的显示:在上一次SpringBoot&Vue3前后端分离实战wiki知识库系统<十>--文档管理功能开发二文档管理模块还差文档的显示木有完成,所以接下来先将这块模块给收尾了。增加单独获取内容的接口:概述:在前端页面文档查询时,只查询了文档的基本信息,其中文档的富文本内容是木有带出来的:当......
  • Spring Boot + Vue3前后端分离实战wiki知识库系统<十一>--文档管理功能开发三
    文档内容的显示:在上一次https://www.cnblogs.com/webor2006/p/17510360.html文档管理模块还差文档的显示木有完成,所以接下来先将这块模块给收尾了。增加单独获取内容的接口:概述:在前端页面文档查询时,只查询了文档的基本信息,其中文档的富文本内容是木有带出来的:当然也不可能......
  • 在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化
    LLM的问题就是权重参数太大,无法在我们本地消费级GPU上进行调试,所以我们将介绍3种在训练过程中减少内存消耗,节省大量时间的方法:梯度检查点,LoRA和量化。梯度检查点梯度检查点是一种在神经网络训练过程中使动态计算只存储最小层数的技术。为了理解这个过程,我们需要了解反向传播是......
  • 前后端联调步骤
    确定接口:前后端需要确定接口的格式和参数。可以使用RESTfulAPI或其他协议来定义接口。模拟数据:前端可以使用mock数据来模拟后端接口的数据,以便在没有实际数据的情况下进行测试。联调接口:前后端开始通过接口协作来实现整个应用的功能。后端提供接口,前端调用接口获取数据。......
  • Linux文件与目录的三种时间状态(mtime,atime,ctime)区别
    最后一次修改文件或目录的时间最后一次改变文件或目录(改变的是原数据即:属性)的时间如:记录该文件的inode节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值。最后一次访问文件或目录的时间对于文件:当修改mtime时,c......
  • USB前后置摄像头切换
    方法1:修改文件:hardware\rockchip\camera\CameraHal\CameraHal_Module.cpp//默认前置置摄像头camInfoTmp[cam_cnt&0x01].facing_info.facing=CAMERA_FACING_FRONT;//默认后置置摄像头camInfoTmp[cam_cnt&0x01].facing_info.facing=CAMERA_FACING_BACK; 所以将CAME......
  • Blazor前后端框架Known-V1.2.10
    V1.2.10Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。Gitee:https://gitee.com/known/KnownGithub:https://github.com/known/Known概述基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用。跨平台,单页应用,混合桌面应用,Web和桌面......
  • 项目实战-前后端分离博客系统
    项目实战-前后端分离博客系统1.项目介绍纯后端讲解完整的前台后台代码编写主流技术栈(SpringBoot,MybatisPlus,SpringSecurity,EasyExcel,Swagger2,Redis,Echarts,Vue,ElementUI....)完善细致的需求分析由易到难循序渐进2.创建工程​ 我们有前台和后台两套系统。两套系统......
  • 正则非贪婪 (清除java类三种注释)
    最大匹配(默认):  最小匹配(加一个问号):   匹配//注释:[\t ]*//.*[^\r\n]匹配/***/doc注释和/**/块注释():[\t ]*/\*[\s\S]*?\*/ 验证:/**Copyright(c)1994,2013,Oracleand/oritsaffiliates.Allrightsreserved.*/packagezz;/***......