美文网首页
前后端分离-Ajax和Vue

前后端分离-Ajax和Vue

作者: 今天也是努力的小张 | 来源:发表于2020-10-14 22:10 被阅读0次

一、Ajax

1.基础理论

Ajax(Asynchronous JavaScript and XML):异步的 JavaScript 和 XML。
用JavaScript语言与服务器进行异步交互,传输的数据为XML(不只是XML,现在XML用的较少),还有json数据
特点:当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新

ajax.png
2.简单应用

前端代码:

<script>
    $(function() {
        $.ajax({
            url: '/ajaxTestDemo/',     //请求到后台的路由
            type: 'get',     //请求方式
            //访问成功时执行的函数
            //后台传过来的数据传给了参数result
            success: function(result){   
                alert('success');
                console.log(result);
                console.log(result.status);    //数据
            },
            //访问失败时执行的函数
            error: function (result) {
                alert('error');
            }
        })
    })
</script>

后台代码

from flask import jsonify


@userbp.route('/ajaxTestDemo/')
def ajaxtest():
    # 返回json数据
    dic = {'status': 'ok'}
    print('xxxxxxx')
    return jsonify(dic)

二、Vue

1.基础理论

使用ajax将后台传入的数据展示在页面时,需要使用传统的js方法:text、innerHtml、append等,比较麻烦,所以使用Vue框架。
Vue是一套用于构建用户界面的JavaScript框架,前端使用Vue的目的就是将ajax里面的数据绑定到前端

2.简单应用:

(1)下载引入
参考vue官网教程

  • vue.min.js/vue.js


    vue下载.png
  • vue-resource
    vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为简洁。(有了vue-resource插件才能像ajax一样与后台进行交互)。
    vue-resource下载网址
    可以直接使用<script src="https://cdn.bootcdn.net/ajax/libs/vue-resource/0.1.0/vue-resource.js"></script>标签,也可以复制链接另存为,下载.js文件。

vue-resource官网截图.png vue-resource下载完成.png
2.简单应用

(1)Django的模板中使用vue时,语法冲突,需要增加标签verbatim处理。

{% verbatim %}
    <div id='app'>
        {{ message }}
    </div>
{% endverbatim %}

(2)vue基本语法
vue使用时由两个部分组成:一个是页面上的html代码,另一部分是脚本。脚本内的变量只能在选择器范围内(选定的html代码区域)使用。

  • 变量:双大括号语法(mustache) {{ demomessage }}
  • v-bind:mustache不能作用在HTML attribute(属性)上,此时需要使用v-bind
    例如:img的src属性,a标签的href属性
  • v-if:判断,当v-if="true"时,内容被渲染
  • v-for:循环
  • v-on:监听DOM事件,并在出发时运行一些js代码。例如click事件。
    应用举例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue使用</title>
    <script src="/static/buyer/js/jquery.min.js"></script>
    <script src="/static/buyer/js/vue.min.js"></script>
</head>
<body>
<h1>vue使用</h1>
<!--告诉django 不要解析 里面的内容-->
{% verbatim %}
<div id="app">
    <!--变量显示-->
    {{ msg }}
    <!--绑定属性-->
    <a v-bind:href="url">百度</a>
    <a href="http://www.baidu.com">百度</a> <br/>
    <!-- 判断-->
    <p v-if="flag">
        哈哈
    </p>
    <!--for循环-->
    <ul>
        <li v-for="game in gameList">{{ game }}</li>
    </ul>
    <button v-on:click="test">按钮</button>
</div>

{% endverbatim %}
</body>

<script>
    $(function () {
        new Vue({
            el: "#app", // element 绑定页面的范围
            data: { // 接受数据
                msg: 'hello vue',
                url: 'http://www.baidu.com',
                flag: true,
                gameList: ['LOL', 'CF', 'COC', 'DNF']
            },
            methods: {
                // 绑定事件
                test: function () {
                    alert('我是弹框...');
                }
            },
            // 创建方法。
            created: function () {
                alert('创建完成了...');
            }
        })
    })
</script>
</html>

(3)vue向后台请求数据简单应用

  • vue脚本代码
 <script src="/static/buyer/js/jquery.min.js"></script>
<script src="/static/buyer/js/vue.min.js"></script>
<script src="/static/buyer/js/vue-resource.js"></script>
<script>
    $(function () {
        new Vue({
            el: "#app",

            data: {
                goodsList: []
            },

            created: function () {
                // 发送ajax 请求
                var goodstype_id = $("#goodstype_id").val();
                var url = '/buyer/more_goods_list_ajax/?goodstype_id=' + goodstype_id;
                this.$http.get(url).then(
                    function (result) {// 成功执行
                        alert('ok...');
                        //console.log(result);
                        //console.log(result.data);
                        this.goodsList = result.data;
                    },
                    function (result) {// 失败执行
                        alert('error');
                    }
                )
            }
        })
    })
</script>
  • 后台发送数据(django框架中的应用举例)
from django.http import JsonResponse


# 接受ajax 请求
def more_goods_list_ajax(request):
    # 1.查询所有的商品
    goodstype_id = request.GET.get('goodstype_id')
    # print(goodstype_id)
    # 2.查询数据库数据
    goods_obj_list = models.Goods.objects.filter(goodstype_id=goodstype_id)
    # print(goods_obj_list)
    # 3.重新组织数据结构 [{'name':'','path','','price':''},{},{}]
    goods_dic_list = []
    for goods_obj in goods_obj_list:
        dic = {}
        dic['name'] = goods_obj.name
        dic['image'] = goods_obj.image.name
        dic['price'] = goods_obj.price
        goods_dic_list.append(dic)
    # 3.返回数据
    return JsonResponse(goods_dic_list, safe=False)   # 可以放列表,默认只能放字典

更多请参考Vue官网
vue-resource官网

如有不妥,欢迎指正。

相关文章

  • vue合家福实例(8):使用axios进行ajax请求

    前后端分离后,它们之间主要的沟通方式是ajax请求响应。vue官方的vue-resource,和axios都可以实...

  • 周总结(2020-12-27)

    这次实习讲的是用javaweb和vue或ajax实现前后端分离。老实说我确实不会,不用ssm和springboot...

  • Vue组件优雅的使用Vuex异步数据

    Vue组件优雅的使用Vuex异步数据 前端:Vue+element项目为前后端分离项目,通过Ajax交换数据。更新...

  • nginx配置二级域名

    最近为了练手Vue框架,写了一个博客项目,昨天刚刚把个人博客部署上线,因为前后端分离,所以使用Ajax来请求后端a...

  • mock.js 生成后端api数据

    上面几个文章里面学习了一些vue的基础。后面的文章我们将会学到vue中进行ajax获取远程数据在前后端分离开发方式...

  • flow-vue.js移动端效果

    得益于vue.js和element,以及vue-element-extends在线表格编辑。前后端分离的后端用go...

  • go+vue项目跨域问题

    使用go+vue达到前后端完全分离,前端vue需要占用一个端口,后端go也需要占用一个端口,就会产生跨域问题。 前...

  • 前后端分离

    当今的软件开发环境流行前后端分离,而不是之前的前后端耦合。前后端分离核心思想是前端html页面通过ajax调用后端...

  • 从壹开始前后端分离 [ Vue2.0+.NET Core2.1]

    缘起 昨天说到了《从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║ Vue前篇:JS对象...

  • 前后端分离

    前后端分离的好坏? 前后端分离的主要概念就是:后台只需提供API接口,前端调用AJAX实现数据呈现!!!完美啊。后...

网友评论

      本文标题:前后端分离-Ajax和Vue

      本文链接:https://www.haomeiwen.com/subject/teqapktx.html