首页 > 其他分享 >前端工程化Ajax

前端工程化Ajax

时间:2024-12-21 18:30:32浏览次数:5  
标签:vue 请求 get 前端 js Ajax axios 工程化 data

1 Ajax

1.1 Ajax介绍

1.1.1 Ajax概述

我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序,所以必须涉及到2个程序的交互,所以这就需要用到我们接下来学习的Ajax技术。

Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML。

作用有如下2点:

  • 与服务器进行数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。
  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等。

1.3 Axios

上述原生的Ajax请求的代码编写起来还是比较繁琐的,所以接下来我们学习一门更加简单的发送Ajax请求的技术Axios 。Axios是对原生的AJAX进行封装,简化书写。Axios官网是:https://www.axios-http.cn

1.3.1 Axios的基本使用

Axios的使用比较简单,主要分为2步:

  • 引入Axios文件

    <script src="js/axios-0.18.0.js"></script>
    
  • 使用Axios发送请求,并获取响应结果,官方提供的api很多,此处给出2种,如下

    • 发送 get 请求

      axios({
          method:"get",
          url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
      }).then(function (resp){
          alert(resp.data);
      })
      
    • 发送 post 请求

      axios({
          method:"post",
          url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
          data:"username=zhangsan"
      }).then(function (resp){
          alert(resp.data);
      });
      

    axios()是用来发送异步请求的,小括号中使用 js的JSON对象传递请求相关的参数:

    • method属性:用来设置请求方式的。取值为 get 或者 post。
    • url属性:用来书写请求的资源路径。如果是 get 请求,需要将请求参数拼接到路径的后面,格式为: url?参数名=参数值&参数名2=参数值2。
    • data属性:作为请求体被发送的数据。也就是说如果是 post 请求的话,数据需要作为 data 属性的值。

    then() 需要传递一个匿名函数。我们将 then()中传递的匿名函数称为 回调函数,意思是该匿名函数在发送请求时不会被调用,而是在成功响应后调用的函数。而该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。

1.3.2 Axios快速入门

1.引入js文件

2.使用Axios发送请求并获取响应结果

get请求

  //通过axios发送异步请求-get
   axios({
       method: "get",
       url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"
   }).then(result => {
       console.log(result.data);
   })

post请求代码如下:

//通过axios发送异步请求-post
 axios({
     method: "post",
     url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",
     data: "id=1"
 }).then(result => {
     console.log(result.data);
 })

1.3.3 请求方法的别名

Axios还针对不同的请求,提供了别名方式的api,具体如下:

方法 描述
axios.get(url [, config]) 发送get请求
axios.delete(url [, config]) 发送delete请求
axios.post(url [, data[, config]]) 发送post请求
axios.put(url [, data[, config]]) 发送put请求

我们目前只关注get和post请求,所以在上述的入门案例中,我们可以将get请求代码改写成如下:

axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {
    console.log(result.data);
})

post请求改写成如下:

axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result => {
    console.log(result.data);
})

案例

  • 步骤:

    1. 首先创建文件,提前准备基础代码,包括表格以及vue.js和axios.js文件的引入
    2. 我们需要在vue的mounted钩子函数中发送ajax请求,获取数据
    3. 拿到数据,数据需要绑定给vue的data属性
    4. 在<tr>标签上通过v-for指令遍历数据,展示数据
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax-Axios-案例</title>
    <script src="js/axios-0.18.0.js"></script>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <table border="1" cellspacing="0" width="60%">
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>图像</th>
                <th>性别</th>
                <th>职位</th>
                <th>入职日期</th>
                <th>最后操作时间</th>
            </tr>
            **emp是自己随便命名的变量名,emps也是**
            <tr align="center" v-for="(emp,index) in emps">
                <td>{{index + 1}}</td>
                <td>{{emp.name}}</td>
                <td>
                    <img :src="emp.image" width="70px" height="50px">
                </td>
                <td>
                    <span v-if="emp.gender == 1">男</span>
                    <span v-if="emp.gender == 2">女</span>
                </td>
                <td>{{emp.job}}</td>
                <td>{{emp.entrydate}}</td>
                <td>{{emp.updatetime}}</td>
            </tr>
        </table>
    </div>
</body>
<script>
    new Vue({
       el: "#app",
       data: {
         emps:[]
       },
       mounted () {
          //发送异步请求,加载数据
          axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {
            console.log(result.data);
            this.emps = result.data.data;
          })
       }
    });
</script>
</html>

2 前后台分离开发

基于前后台分离开发的模式下,我们后台开发者开发一个功能的具体流程

  1. 需求分析:首先我们需要阅读需求文档,分析需求,理解需求。
  2. 接口定义:查询接口文档中关于需求的接口的定义,包括地址,参数,响应数据类型等等
  3. 前后台并行开发:各自按照接口文档进行开发,实现需求
  4. 测试:前后台开发完了,各自按照接口文档进行测试
  5. 前后段联调测试:前段工程请求后端工程,测试功能

3 前端工程化

3.1 前端工程化介绍

我们目前的前端开发中,当我们需要使用一些资源时,例如:vue.js,和axios.js文件,都是直接再工程中导入的

但是上述开发模式存在如下问题:

  • 每次开发都是从零开始,比较麻烦
  • 多个页面中的组件共用性不好
  • js、图片等资源没有规范化的存储目录,没有统一的标准,不方便维护

所以现在企业开发中更加讲究前端工程化方式的开发,主要包括如下4个特点

  • 模块化:将js和css等,做成一个个可复用模块
  • 组件化:我们将UI组件,css样式,js行为封装成一个个的组件,便于管理
  • 规范化:我们提供一套标准的规范的目录接口和编码规范,所有开发人员遵循这套规范
  • 自动化:项目的构建,测试,部署全部都是自动完成

3.2 前端工程化入门

3.2.1 环境准备

我们的前端工程化是通过vue官方提供的脚手架Vue-cli来完成的,用于快速的生成一个Vue的项目模板。Vue-cli主要提供了如下功能:

  • 统一的目录结构
  • 本地调试
  • 热部署
  • 单元测试
  • 集成打包上线

我们需要运行Vue-cli,需要依赖NodeJS,NodeJS是前端工程化依赖的环境。所以我们需要先安装NodeJS,然后才能安装Vue-cli

创建Vue项目

图形化界面:通过命令先进入到图形化界面,然后再进行vue工程的创建
vue ui

首先,我们再桌面创建vue文件夹,然后双击进入文件夹,来到地址目录,输入cmd,然后进入到vue文件夹的cmd窗口界面
然后再当前目录下,直接输入命令vue ui进入到vue的图形化界面
然后我门选择创建按钮,在vue文件夹下创建项目
包管理器换成npm Git仓库关掉先不用
预设模板选择手动
然后再功能页面开启路由功能,叫Router
然后再配置页面选择语言版本(3.x换成2.x)和语法检查规范选(第一个)
然后创建项目(目前好像不保存预设模板)
最后我们只需要等待片刻,即可进入到创建创建成功的界面

目录结构介绍

node_modules:依赖包存放
public:静态文件存放
src:源代码
asseys静态资源
components可重用的组件
router路由配置
views视图组件(页面)
App.vue入口页面(根组件)
main.js入口js文件
...
package.json:模块基本信息
...
vue.config.js:保存vue配置的文件,如代理,端口的配置等

运行Vue项目

方式一:图形化界面vs-code下的NPM脚本(默认不显示,得调出来)下的第一个运行方式
方式二:当前目录下的命令行执行 npm run serve
补充:NPM脚本窗口调试出来

第一步:通过设置/用户设置/扩展/NPM更改NPM默认配置
然后重启VS Code,并且双击打开package.json文件,然后点击资源管理器处的3个小点勾选npm脚本选项

对于8080端口,经常被占用,所以我们可以去修改默认的8080端口。我们修改vue.config.js文件的内容,添加如下代码:

devServer:{
    port:7000
}

然后我们关闭服务器,并且重新启动,

3.2.3 Vue项目开发流程

那么我们访问的首页是index.html,但是我们找到public/index.html文件,打开之后发现,里面没有什么代码,但是能够呈现内容丰富的首页

我们仔细观察发现,index.html的代码很简洁,但是浏览器所呈现的index.html内容却很丰富,代码和内容不匹配,所以vue是如何做到的呢?接下来我们学习一下vue项目的开发流程。

对于vue项目,index.html文件默认是引入了入口函数main.js文件,我们找到src/main.js文件,其代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

上述代码中,包括如下几个关键点:

  • import: 导入指定文件,并且重新起名。例如上述代码import App from './App.vue'导入当前目录下得App.vue并且起名为App
  • new Vue(): 创建vue对象
  • $mount('#app');将vue对象创建的dom对象挂在到id=app的这个标签区域中,作用和之前学习的vue对象的le属性一致。
  • router: 路由,详细在后面的小节讲解
  • render: 主要使用视图的渲染的。

来到public/index.html中,我们删除div的id=app属性,打开浏览器,发现之前访问的首页一片空白,如下图所示,这样就证明了,我们main.js中通过代码挂在到index.html的id=app的标签区域的。
此时我们知道了vue创建的dom对象挂在到id=app的标签区域

我们打开App.vue,注意的是.vue结尾的都是vue组件。而vue的组件文件包含3个部分:

  • template: 模板部分,主要是HTML代码,用来展示页面主体结构的
  • script: js代码区域,主要是通过js代码来控制模板的数据来源和行为的
  • style: css样式部分,主要通过css样式控制模板的页面效果得
<template>
  <div id="app">
    {{message}}
  </div>
</template>

<script>
export default {
  data(){
    return {
      "message":"hello world"
    }
  }
}
</script>
<style>

</style>

标签:vue,请求,get,前端,js,Ajax,axios,工程化,data
From: https://www.cnblogs.com/Yunyuzuiluo/p/18619940

相关文章

  • 【闭包】前端的“保护神”——闭包详解+底层原理
    目录 一、闭包是什么?概念二、闭包为什么存在?作用1.创建私有变量2.实现数据封装与信息隐藏3.模拟私有方法4.保存函数执行时的状态5.回调函数和事件处理6.模块化编程7.懒加载与延迟执行 三、闭包怎么用?实践+业务场景1.封装私有变量2.延迟执行(定时器、异步......
  • ajax
    什么是ajax异步请求同步请求的流程而ajax响应的不在是地址或网页,而是一个数据。在那里发送请求数据就响应到哪里。ajax使用的场景ajax不会刷新整个页面,只会更新页面的部分内容。ajax服务器返回的是数据。而不是页面了。了解:js+html+css+servletajax异步请求的流程......
  • 前端 PDF 生成和分页的最佳实践:利用 `jspdf` 和 `html2canvas` 从基础到高级技巧
    前端PDF生成和分页的最佳实践:利用jspdf和html2canvas从基础到高级技巧标签:PDF生成、分页处理、前端开发、jspdf、html2canvas引言在实际开发中,很多场景都会涉及PDF的生成,比如合同生成、内容导出等等。我遇到的一个实际问题是,在项目中需要将合同内容生成PDF,合......
  • 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)
    本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录。分析这里的代码跟上文的类似,但是加密的公钥是通过请求服务端获取的http://127.0.0.1:8787/crypto/js/rsa/generator由于密钥是服务端生......
  • 前端本地存储指南:从 localStorage 到 IndexedDB,技术优缺点与示例代码
    作为一名前端程序员,总会面临一个问题:“用户的数据该往哪里放?”这就好比一个咖啡店老板,想着咖啡豆要放仓库、柜台还是直接丢客户兜里。今天我们就来聊聊前端常用的本地存储技术,各自的优缺点,以及到底该选哪一个!1.localStorage—傻白甜的代名词localStorage是前端开发者最......
  • 做为前端开发,你有尝试过哪些深度思考?
    在前端开发领域,深度思考对于技术的提升和项目的成功至关重要。以下是一些我尝试过的深度思考方向,它们帮助我在前端开发中不断进步:技术选型与未来趋势:在开始一个新项目时,我会深入思考哪种前端框架或库最适合项目的需求。这包括比较不同技术的优缺点、学习曲线、社区支持等因素......
  • 接口一异常你的前端页面就直接崩溃了?
    解构失败报错不做任何处理直接将后端接口数据进行解构consthandleData=(data)=>{const{user}=data;const{id,name}=user;}handleData({})VM244:3UncaughtTypeError:Cannotdestructureproperty'id'of'user'asitisundefined.解构赋......
  • 【软件测试】前端测试分析
    目的1.从前端角度来发现Web系统的问题。2.熟悉Web前端测试方法。3.掌握应用层协议HTTP的结构和工作过程。4.熟悉GET和POST请求过程(一)对新浪首页进行前端分析使用Chrome打开新浪首页https:/www.sina.com.cn/,打开开发者工具模式进行监控首页的加载过程,对加载过程进......
  • 使用Vue创建前后端分离项目的过程(前端部分)
            前端使用Vue.js作为前端开发框架,使用VueCLI3脚手架搭建项目,使用axios作为HTTP库与后端API交互,使用Vue-router实现前端路由的定义、跳转以及参数的传递等,使用vuex进行数据状态管理,后端使用Node.js+express,连接Mysql数据库。1.确定电脑上已经安装了Node.js......
  • web前端期末大作业:婚纱网页主题网站设计——唯一旅拍婚纱公司网站HTML+CSS+JavaScript
    ......