首页 > 其他分享 >使用axios 请求后端

使用axios 请求后端

时间:2023-06-10 15:44:49浏览次数:53  
标签:axios 请求 void bh 使用 import com public String

1、使用CDN的方式导入axios

点击查看代码
 <script
src="https://unpkg.com/axios/dist/axios.min.js">
</script>
二,跨域问题的解决 1,什么是跨域CORS, 全称是: Cross-Origin Resource Shareing


2,跨域问题的解决
后端增加全局的过滤器
三, 前端elementUI

点击查看代码
<!-- 引入样式 --><link rel="stylesheet"
href="https://unpkg.com/element-ui/lib/themechalk/index.css"><!-- 引入组件库 --><scriptsrc="https://unpkg.com/element-ui/lib/index.js">
</script>

---------代码实例---------------

前端vue代码
<!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>Document</title>
</head>
<body>
    <div id="app">
        <!-- <button @click="doSearch">search</button> -->
        <!-- <table border="1" cellspacing="0" cellpadding="0">
            <tr v-for="emp in items">
                <td>{{emp.empno}}</td>
                <td>{{emp.ename}}</td>
                <td>{{emp.job}}</td>

            </tr>
        </table> -->
        <el-button type="primary"  @click="doSearch">主要按钮</el-button>
        <el-table
      :data="items"
      style="width: 100%">
      <el-table-column
        prop="empno"
        label="员工号"
        width="180">
      </el-table-column>
      <el-table-column
        prop="ename"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="job"
        label="工作">
      </el-table-column>
    </el-table>

    </div>
</body>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <!-- 使用CDN的方式导入axios -->
 <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
 <!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <script>
          var vm = new Vue({
        el:"#app",
        data:{
            message:"hello vue",
            items:[],
        },
        methods:{
            doSearch:function(){
                axios.get(
                    //url
                    "http://localhost:8080/ssm01/emp/findall.do"
                ).then(
                    res => {
                        console.log(res)
                        if(res.status == 200){
                            this.items = res.data.data.items;

                        }

                    }
                );
            }
        }
    });
    </script>
</html>
controller层
package com.bh.controller;

import com.bh.po.R;
import com.bh.service.impl.EmpServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/emp")
public class EmpController {
    @Autowired
    private EmpServiceImpl empService;
    @RequestMapping("/findall.do")
    public @ResponseBody R findAll(){
        R r = empService.findAll();
        return r;

    }
}

service层接口
package com.bh.service;

import com.bh.po.R;

import java.util.List;

public interface IService {
    /*public List findAll();*/
    public R findAll();
}

service实现类
package com.bh.service.impl;

import com.bh.dao.EmpDAO;
import com.bh.po.Emp;
import com.bh.po.R;
import com.bh.service.IService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
@Service
public class EmpServiceImpl implements IService {
    @Autowired
    private EmpDAO empDAO;
    @Override
    public R findAll() {
        R r = new R();
        HashMap<String, Object> rsMap = new HashMap<>();
        List<Emp> all = empDAO.findAll();
        if (all == null || all.size()==0){
            r.setStatus(2001);
            r.setMessage("没有数据");
            rsMap.put("items","empty");
            r.setData(rsMap);

        }else {
            r.setStatus(2000);
            r.setMessage("检索成功");
            rsMap.put("items",all);
            r.setData(rsMap);
        }
        return r;
    }
}

dao层
package com.bh.dao;

import com.bh.po.Emp;

import java.util.List;

public interface EmpDAO {
    public List<Emp> findAll();
}

mapper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bh.dao.EmpDAO">
    <select id="findAll" resultType="com.bh.po.Emp">
        select * from emp

    </select>
</mapper>
po
package com.bh.po;

public class Emp {
    private int empno;
    private String ename;
    private String job;
    private String salary;
    private int deptno;

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getSalary() {
        return salary;
    }

    public void setSalary(String salary) {
        this.salary = salary;
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

}

R类
package com.bh.po;

import java.util.Map;

public class R {
    //处理结果code(2000,2001,5000)
    private int status;
    //处理结果的message
    private String message;
    //处理结果
    private Map<String,Object> data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }
}

解决跨域问题增加的全局过滤器
package com.bh.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CORSFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest res = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;

        //所有的处理的responsne中,都增加[Access-Control-Allow-Origin]
        //允许跨域
        resp.setHeader("Access-Control-Allow-Origin","*");

        filterChain.doFilter(res,resp);

    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

web.xml配置文件增加跨域的配置信息
   <!--跨域处理-->
    <filter>
        <filter-name>Cors</filter-name>
        <filter-class>com.bh.filter.CORSFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Cors</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

--------运行结果-------

1、后端运行出来的结果信息就是单纯的json字符串数据

2、vue使用axios请求后端运行出来的数据(这里只取了三个字段用作演示),用了elementUi组件

标签:axios,请求,void,bh,使用,import,com,public,String
From: https://www.cnblogs.com/liangkuan/p/17471348.html

相关文章

  • VSCode使用指定的 SOCKS 代理进行网络连接
    VSCode使用指定的SOCKS代理进行网络连接June10,2023vscode怎么打开settings.json文件?ChatGPT在VisualStudioCode(VSCode)中,打开settings.json文件的步骤如下:打开VisualStudioCode。点击左上角的“文件”菜单,然后选择“首选项”>“设置”(或者你可......
  • Python+OpenGL使用Cohen-Sutherland算法实现直线裁剪
    问题描述:编写Python程序,使用OpenGL实现用于直线裁剪的Cohen-Sutherland算法。运行程序,绘制一个矩形表示裁剪窗口,然后通过鼠标单击和移动来绘制直线,鼠标抬起时对刚刚绘制的直线进行裁剪,显示最终落在裁剪窗口中的部分。关于Cohen-Sutherland算法请自行查阅资料。准备工作:安装和配置Py......
  • 微课--Python嵌套函数定义与使用
    7.1.3 函数嵌套定义与使用在Python中,允许函数的嵌套定义,也就是在一个函数的定义中再定义另一个函数。在内层定义的函数中,除了可以使用内层函数内定义的变量,还可以访问外层函数的参数和外层函数定义的变量以及全局变量和内置对象。除非特别必要,一般不建议过多使用嵌套定义函数,因为......
  • 微课--Python生成器函数定义与使用(19分钟)
    8.5 生成器函数定义与使用(书稿节选)如果函数中包含yield语句,那么调用这个函数得到的返回值不是单个值,而是一个包含若干值的生成器对象,这样的函数也称生成器函数。代码每次执行到yield语句时,返回一个值,然后暂停执行,当通过内置函数next()、for循环遍历生成器对象元素或其他方式显式......
  • 使用Python检查实验教学大纲(Word文件)中前后信息是否一致
    问题描述:应选用教材的老师们要求,整理了一份与教材《Python程序设计(第3版)》配套的实验教学大纲,共45页72个实验项目。需要的老师可以联系董老师获取这个文件。在实验教学大纲中,核心内容有两块,一个是实验项目信息汇总表,部分内容如下图所示,实验教学大纲中第二个核心内容是每个实验项目......
  • vuex使用,Router使用(做两个主页面的跳转),路由守卫(对路由进行权限控制),路由的工作模式
    vuex使用使用的流程文件中的代码前端页面<template><div><h1>使用vuex</h1>购物车商品数量:{{num}}购物车的数量:{{$store.state.num}}<br><button@click="yjx">加数量</button></div></template><sc......
  • 微课--25分钟学会使用Python群发电子邮件
    例5-3 编写程序,登录126邮箱或QQ邮箱自动群发电子邮件。首先需要对邮箱进行设置,开启POP3/SMTP服务,然后运行下面的程序并输入邮箱地址、授权码和收件人电子邮箱地址,即可自动群发电子邮件。视频讲解:参考代码:公众号“Python小屋”......
  • Python使用pdfminer3k提取PDF文件中的文本
    任务描述:编写Python程序,提取PDF文件中的文本内容,生成与原PDF文件同名的文本文件。准备工作:安装扩展库pdfminer3k。参考代码:公众号“Python小屋”......
  • 使用Mybatis框架(xml)
    结构: Pojo实体类,对应mysql表的结构 mapper,将sql映射成方法,通过demo去调用sql方法XXXmaaper.xml里面写了具体的sqllogback.xml、mybatis.xml配置信息使用mapper去代理开发要将XXXmapper.xml配置和mapper方法类放在同一目录下 XXXmapper.xml具体类的配置:<?xmlversion......
  • 自定义字体/图标的使用
    图标下载网站 选择需要的图标下载代码 下载后的代码 demo_index.html里会教你怎么使用1. 拷贝到index.css将这五个文件拷贝 拷贝到新建的文件夹font 修改里面路径 2.  拷贝到index.css 3.  demo_index.html里有Unicode码 如下图使用 ......