码迷,mamicode.com
首页 > 其他好文 > 详细

大事件--练习项目分享--实现前后端交互

时间:2020-12-14 12:53:50      阅读:2      评论:0      收藏:0      [点我收藏+]

标签:编程思想   错误处理   练习   smis   miss   span   block   publish   路径   

项目介绍:

实现的页面效果:

前台页面:

技术图片技术图片技术图片

后台管理页面:

技术图片技术图片技术图片

以上的静态页面,通过 HTML结构 和 CSS样式  实现  而页面的交互由 JS 来实现

练习项目的目标:

1.了解真实项目开发的架构设计

  • (1)前端三层分离的编程思想

  • (2)网络请求层单独处理的编程思想

  • 技术图片

2.培养大家的项目思维能力

  • (1)独立小功能需求分析->页面需求分析->整个项目需求分析

  • (2)熟练运用ajax+模板引擎实现页面业务逻辑功能

  • 技术图片

3.提升大家的项目经验

  • (1)项目技术难点的分析与解决方案

  • (2)各种第三方插件使用

  • 技术图片

回顾ajax发起请求和接收响应

回顾模板引擎实现数据的动态渲染

掌握token实现状态保持的前台页面实现过程

进一步的掌握和体会前台页面的交互,理解前台页面交互的处理流程

进一步的掌握ajax的其它使用方式

 

搭建后台环境:

项目之前需要使用数据可视化软件 naVicat  和 mysql数据库 将以存储的数据导入和服务器的开启  

打开大事件项目文件夹 >> 找到大事件接口文件夹 >> 找到BigEventServers文件夹 >> 找到config 下的文件 index.js 打开 根据文件内容

技术图片

根据以上内容,在Navicat 中新建一个名字叫 ‘bignews‘ 的数据库  >>  然后在BigEventServers文件夹中找到 reset 文件打开 >>  在打开的该目录下打开小黑窗  >>  输入命令 node index.js 出现‘搞定‘两个字即数据导入成功.

打开服务器: 在BigEventServers文件夹目录下 打开小黑窗 输入命令  app.js 运行 出现:  开启成功:  http://localhost:8080   即服务器打开成功.

 

模态框的添加

原因:: 相当于弹出层,可以用于取代alert进行用户提示  

 1 <!-- 模态框做为body的直接子元素 -->
 2 <div class="modal fade" id="myModal" tabindex="-1" role="dialog">
 3     <div class="modal-dialog" role="document">
 4         <div class="modal-content">
 5             <div class="modal-header">
 6                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
 7                                                                                                   aria-hidden="true">&times;</span></button>
 8                 <h4 class="modal-title">友情提示</h4>
 9             </div>
10             <div class="modal-body">
11                 <p class="logininfo">One fine body&hellip;</p>
12             </div>
13             <div class="modal-footer">
14                 <button type="button" class="btn btn-primary btnconfirm">确定</button>
15             </div>
16         </div>
17     </div>
18 </div>

 

注意点:   模态框的整体结构要直接做 body 的子元素, 如果嵌套在其他HTML结构中会出现模态框无法点击使用

http模块的封装

作用: 使页面的代码更简洁, 便于管理, 不易出错. 页面请求的 url 只需要引入该文件(http.js) 再调用方法即可

 1 (function (w) {
 2   var baseURL = ‘http://127.0.0.1:8080/api/v1‘
 3   w.itcast = {
 4     // 定义基准路径,所谓基准路径就是资源url前面那一坨
 5     baseURL: baseURL,//基地址
 6     user_login: baseURL + ‘/admin/user/login‘,//用户登录
 7     user_info: baseURL + ‘/admin/user/info‘,//用户信息
 8     user_detail: baseURL + ‘/admin/user/detail‘,//用户详情
 9     user_edit: baseURL + ‘/admin/user/edit‘,//用户编辑
10     category_list: baseURL + ‘/admin/category/list‘,//文章类别查询
11     category_add: baseURL + ‘/admin/category/add‘,//文章类别新增
12     category_search: baseURL + ‘/admin/category/search‘,//文章类别搜索
13     category_edit: baseURL + ‘/admin/category/edit‘,//文章类别编辑
14     category_delete: baseURL + ‘/admin/category/delete‘,//文章类别删除
15     article_query: baseURL + ‘/admin/article/query‘,//文章搜索
16     article_publish: baseURL + ‘/admin/article/publish‘,//文章发布
17     article_search: baseURL + ‘/admin/article/search‘,//文章信息查询
18     article_edit: baseURL + ‘/admin/article/edit‘,//文章编辑
19     article_delete: baseURL + ‘/admin/article/delete‘,//文章删除
20     comment_search: baseURL + ‘/admin/comment/search‘,//文章评论列表
21     comment_pass: baseURL + ‘/admin/comment/pass‘,//文章评论通过
22     comment_reject: baseURL + ‘/admin/comment/reject‘,//文章评论不通过
23     comment_delete: baseURL + ‘/admin/comment/delete‘,//文章评论删除
24   }
25 })(window)

 

 

后台登录页面

实现点击登录按钮, 登录到后台首页页面

 1 // 实现登陆
 2 // 1、用户登录
 3 // 请求地址:/admin/user/login
 4 // 请求方式:post
 5 $(‘.input_sub‘).on(‘click‘, function () {
 6     // serialize:获取获取指定表单中拥有name属性的表单元素的value值
 7     console.log($(‘.login_form‘).serialize())
 8     $.ajax({
 9         type: ‘post‘,
10         url: itcast.user_login,
11         data: $(‘.login_form‘).serialize(),
12         dataType: ‘json‘,
13         success: function (res) {
14             console.log(res)
15             $(‘.logininfo‘).text(res.msg)
16             if (res.code == 200) {
17                 // 将后台返回的token数据存储到本地
18                   localStorage.setItem(‘bignews_token_58‘, res.token)
19                 $(‘#myModal‘).modal(‘show‘)
20                 // hidden.bs.modal:在当前模态框被隐藏之后触发
21                 $(‘#myModal‘).on(‘hidden.bs.modal‘, function (e) {
22                     location.href = ‘./index.html‘
23                 })
24             } else {
25                 // alert(res.msg)
26                 $(‘#myModal‘).modal(‘show‘)
27             }
28         }
29     })
30 })
31 
32 // 单击模态框中的确定,隐藏模态框
33 $(‘.btnconfirm‘).on(‘click‘, function () {
34     $(‘#myModal‘).modal(‘hide‘)
35 })

 

因为后续的页面的操作都需要权限操作 , 即如果用户登录成功了才可以在后续的页面中使用增删改查的权限 , 那就需要给页面传一个tokan令牌,证明用户已经登录过了,即可继续操作页面,

因为后续的页面有很多请求, 如果一个个去加既麻烦还冗余, 这时候就需要一个全局函数来解决这种  

该函数可以写在页面引入的 jQuery文件 的 最后 不要加在中间或其他地方,容易更改了原代码的结构

 1 // 这里添加ajax的全局函数的配置
 2 $.ajaxSetup({
 3     // 每个请求发送之前都会经过beforeSend,可以在这个回调进行请求头的统一设置
 4     beforeSend: function (xhr) {
 5         let token = localStorage.getItem(‘bignews_token_58‘)
 6         if (token) {
 7             xhr.setRequestHeader(‘Authorization‘, token)
 8         }
 9     },
10     // 添加统一的错误处理
11     error: function (xhr, status, error) {
12         console.log(xhr, status, error)
13         if (error == ‘Forbidden‘) {//用户未登录
14             alert(‘请先登录!‘)
15             window.location.href = ‘./login.html‘;//跳转登陆页面
16         };
17     }
18 })

注意事项:

在前端页面结构中如果按钮的类型为: ‘submit‘ 会有一个默认行为,会影响到后面的操作, 所以将登陆按钮的type属性从submit修改为button

参数获取不到,我们需要人为设置表单元素的name, 因为 serialize() 的方法会获取到表单域中带有name属性的元素的表单值  name值一定要参照后台接口

 

token的本地存储和传递

在登陆成功之后将token存储到本地

后续请求传递token

为了简化操作,使用$.ajaxSetup进行统一的处理

在登陆成功之后将token存储到本地

// 将后台返回的token数据存储到本地
localStorage.setItem(‘bignews_token_58‘, res.token)

 

首页

用户信息的动态渲染

首页主体内容页面的展示

左侧菜单的功能处理

顶部栏的个人中心和退出

用户信息的动态渲染

// 动态渲染用户信息
// 2、获取用户信息
// 请求地址:/admin/user/info
// 请求方式:get
$.ajax({
        url: allSite.user_info,
        dataType: ‘json‘,
        // beforeSend: function (xhr) {
        //     xhr.setRequestHeader(‘Authorization‘, localStorage.getItem(‘token_58‘))
        // },
        success: function (res) {
            console.log(res);
            if (res.code == 200) {
                $(‘.user_info>img‘).attr(‘src‘, res.data.userPic)
                $(‘.user_info>span‘).html(`欢迎&nbsp;&nbsp;${res.data.nickname}`)
                $(‘.user_center_link>img‘).attr(‘src‘, res.data.userPic)
            }
        }
    })

 

 

首页主体内容页面的展示

使用iframe浮动框架,也称为页中页

使用方式

1.添加浮动框架,为浮动框架设置name属性

2.设置超链接的target属性的值为iframe的name属性的 值

 

<!-- 右侧主体内容 -->
<div class="main" id="main_body">
    <!-- 添加一个浮动框架 -->
    <iframe class="myframe" src="./main_count.html" frameborder="0" name=‘main_frame‘></iframe>
</div>

 

左侧菜单的功能

 1 //主页左侧导航栏功能实现
 2     $(‘.level01‘).on(‘click‘, function () {
 3         $(this).addClass(‘active‘).siblings().removeClass(‘active‘)
 4 
 5         if ($(this).next().hasClass(‘level02‘)) {
 6             $(this).next().slideToggle()
 7             $(this).find(‘b‘).toggleClass(‘rotate0‘)
 8         } else {
 9             $(‘.level02‘).slideUp()
10             $(‘.level02>li‘).removeClass(‘active‘)
11         }
12     })
13 
14     $(‘.level02>li‘).on(‘click‘, function () {
15         $(this).addClass(‘active‘).siblings().removeClass(‘active‘)
16     })

 

大事件--练习项目分享--实现前后端交互

标签:编程思想   错误处理   练习   smis   miss   span   block   publish   路径   

原文地址:https://www.cnblogs.com/xjs-hp/p/14094387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!