AJAX与axios框架

news2024/11/18 19:45:42

文章目录

  • 前言
  • 案例
  • 跨域访问
  • 总结❗


前言

提示:这里可以添加本文要记录的大概内容:

通过 ajax 进行前后端交互
请添加图片描述

案例

此项目用到了javaweb知识

首先创建JavaWeb项目编写代码:

package ajax;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

@WebServlet("/ajax")
public class ajax extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 将Gson库放在WEB-INF/lib目录下
        // 运行时加载Gson库
        try {
            Class.forName("com.google.gson.Gson");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }

        List<User> list = new ArrayList<User>();
        list.add(new User(1,"张三","23"));
        list.add(new User(2,"李四","28"));
        Gson gson = new Gson();
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        response.getWriter().print(gson.toJson(list));
    }

    class User {
        private int id;
        private String name;
        private String age;

        public User(int id, String name, String age) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSex() {
            return age;
        }

        public void setSex(String sex) {
            this.age = age;
        }
    }
}
//最后将Gson库的jar包重新复制到WEB-INF/lib目录下,或者在Java Web项目的classpath中添加Gson库的jar包

运行结果:
在这里插入图片描述

接下来创建vue项目

创建完项目进入安装Axios框架npm i axios

打开根组件删掉全部代码重新生成

在template标签内加上一个按钮

<!-- 看到按钮就想到事件 -->
<button @click="send">发送请求</button>

接下来在methods里面配置方法

  methods: {
    send(){
    
  },

axios框架发送请求,首先需要先在script标签中导入这个框架

// 第一个axios是自定义名字
import axios from 'axios'

现在回到send方法内部,导入axios调用

  methods: {
    send(){
      // get方法代表向后端发送请求   参数是后端项目程序地址
      // then方法代表处理后端发送回的响应数据
      axios.get('http://localhost:8888/ajax/ajax')
      .then( (resp)=>{
      //log测试
        console.log(resp.data);
      } )
    }
  },

localhost是本地地址,也可以写自己IP地址
运行代码后右键开发者模式点击控制台,然后点击发送请求按钮:在这里插入图片描述

跨域访问

代理服务器的目的:
代理服务器的主要目的是为客户端提供一种间接访问网上资源的方式,客户端向代理服务器发送请求,代理服务器自动转发,从而代替客户端完成请求和响应

对于代理服务器的理解可以参考下面这个比喻:假设你需要访问一个网站,但是由于某些原因无法直接连接该网站,这时候你可以使用一个代理服务器来帮助你连接该网站。代理服务器就像是一个中间人,它接收你的请求,然后将请求转发给目标网站,接着将目标网站的响应返回给你。
这个过程就好像是一个邮递员,他接收用户发出的请求,将请求转发给目标服务器,在目标服务器响应后将响应返回给用户。这个过程就好比是一个人需要向另一个人发送信件,但是由于某些原因不能直接发送,所以需要寄给邮递员,由邮递员帮忙送到另一个人手里。代理服务器可以提高访问速度、保护隐私、过滤内容等等。
因此,代理服务器可以在一些特定的情况下帮助你绕过一些限制和策略,从而达到访问目标网站的目的。

在项目内最下面有个vue.config.js文件,代理服务器加上去(第三行后)

  devServer: {
    proxy: {
      '/api':{
        target: 'http://localhost:8888/ajax/',
        ws: true,
        changeOrigin: true,
        pathRewrite: {
          '^/api':''
        }
      }
    }
  }

这时回到根组件,send方法内的axios地址要改成代理服务器地址

      axios.get('/api/ajax')  

重启项目,刷新页面,点击按钮:
在这里插入图片描述

接下来完善项目,因为在实际项目中用户不会去查看控制台
应该把数据发回来后渲染到视图上

在data中做一个配置项,把发回来的响应数据赋值给data中的配置数据,一赋值vue就监听到了,数据就改变,立刻修改数据同步到视图上

  data () {
    return {
       // 返回到数据是个数组,包含多个数据
       arr:[]
    }
  },

接下来在methods内标签的send方法中删掉log输出,加上

//等于发送回来的相应数据
this.arr = resp.data

完善html代码,这里加了个表格

<template>
  <div>
    <!-- 看到按钮就想到事件 -->
    <button @click="send">发送请求</button>
    <table>
      <tr>
        <th>id</th>
        <th>名字</th>
        <th>年龄</th>
      </tr>
      <tr v-for="(item, index) in arr" :key="index">
        <th>{{ item.id }}</th>
        <th>{{ item.name }}</th>
        <th>{{ item.age}}</th>
      </tr>
    </table>
  </div>
</template>

加上css样式:

<style scoped>
table {
  border-collapse: collapse;
  width: 100%;
  margin-top: 50px;
}

th, td {
  border: 1px solid black;
  padding: 8px;
  text-align: center;
}

thead {
  background-color: #f2f2f2;
}

tr:nth-child(even) {
  background-color: #f2f2f2;
}

button {
  margin-bottom: 20px;
  padding: 10px 20px;
  border: none;
  border-radius: 4px;
  background-color: #4CAF50;
  color: white;
}
</style>

运行效果:

在这里插入图片描述

总结❗

异步请求的同源策略:
浏览器发送的请求必须和前端服务器IP地址一样、端口号一样

前后端分离项目采用的是Ajax异步请求通信方式
采用axios框架发送异步请求
浏览器发送Ajax请求时,会有同源策略限制,禁止跨域请求
前端 和 后端项目的协议、IP地址、端口号都相同才认为是同源

跨域请求解决方案:
1、在前端项目中配置代理服务器(安全性高,常用)
2、在后端项目中设置响应头为资源共享状态(风险高)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个人引导页源码带三个按钮可添加

个人引导页源码带三个按钮可添加 简洁优雅引导页

SpingBoot配置文件

普通参数配置 之前用阿里云oss&#xff0c;如果在每一个都程序都写这个 1.代码一旦修改要一个一个改 2.代码复用性低 所以可以配置到springBoot的配置文件来进行对应的读取&#xff0c;这样复用性就高了 赋值Value&#xff08;和最下面注解功能相同&#xff09; 在applicat…

淘宝app商品详情原数据API接口【详情页优惠券数据】Python语言示例请求范例,多种语言均支持

首先以Python语言请求示例为介绍 请求示例 # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pip install requests """ from __future__ import print_function import requests # 请求示例 url 默认请求参数已经做U…

密码学学习笔记(十一):哈希函数 - Merkle–Damgård结构

Merkle–Damgrd是一种算法&#xff0c;由Ralph Merkle和Ivan Damgrd提出。它通过迭代调用压缩函数来计算消息的哈希值。 应用 拿SHA-2举例&#xff0c;首先我们需要对需要进行哈希运算的输入做填充&#xff0c;然后将填充后的输入划分为等长的分组&#xff0c;每个分组的长度…

中级课程——SSRF

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言挖掘 前言 挖掘

【网站开发】jq (jquery)实现瀑布流布局

要实现网站瀑布流效果&#xff0c;可以使用HTML、CSS和jquery来完成。下面是一种常见的实现方式&#xff1a; 注意要引入jQuery库。 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…

git下载源码及环境搭建之数据库(二)

学习目标&#xff1a; 数据库 新项目使用 数据库文件 的配置 及相关属性的设置 步骤&#xff1a; 数据库 下图所示为开发时所用数据库 第一步&#xff1a;新建一个数据库 注意&#xff1a; 字符集与排序规则我们应该选择utf-8 相关 选中新创建的表&#xff0c;点击备份—还…

【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Flutter:网络图像缓存插件——cached_network_image

前言 为什么要使用这个插件&#xff0c;有什么用呢&#xff1f;毕竟官方提供了Image.network来进行网络图片加载 Image.network和CachedNetworkImage都可以用于在Flutter中加载网络图片&#xff0c;但它们之间有一些区别。 Image.network是Flutter核心库提供的一个构造函数&…

趣味:关于AI是否具备自我意识的探究方案之一

随着gpt等其他NLP大语言模型的爆火&#xff0c;AI技术再次成为我们谈论的焦点&#xff0c;AI是一种拟人的、能够通过学习和自我优化执行各种任务的技术&#xff0c;关于ai是否具备自我意识的答案很明显是否定的&#xff0c;以下将使用一个例子来论证的观点 1.实验准备 我们将…

收拾屋子找出10年前的三维教程

明天找个带光驱的电脑&#xff0c;打开看看。那会还是刻盘&#xff0c; 那会我还是小鲜肉&#xff0c;只是喜欢PS2游戏。所以才接触到三维软件&#xff0c;可惜没干这行。现在变成中年大叔了&#xff0c;拿出来玩会。 想当初现在e维网&#xff0c;下载最新的教程。后面电驴里…

高并发下保证接口幂等性的常用策略

接口幂等性问题&#xff0c;对于开发人员来说是一个常见的公共问题。这里分享一些我在项目中用到过的一些方法&#xff0c;给有需要的同学们一个参考。 你是否遇到过以下的场景&#xff1a; 在填写form页面表单时&#xff0c;如果前端没做loading或者防抖操作&#xff0c;保存…

松松商城上线“谷歌英文外链“资源,松松软文推出英文站点资源

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 近期&#xff0c;为了丰富资源&#xff0c;松松商城和松松软文迎来了一系列新的更新。松松商城推出了“谷歌外贸站英文"外链资源&#xff0c;而松松软文则上线了英文站点资源&#xff0c;为用…

MURF20100CT-ASEMI快恢复对管MURF20100CT

编辑&#xff1a;ll MURF20100CT-ASEMI快恢复对管MURF20100CT 型号&#xff1a;MURF20100CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 恢复时间&#xff1a;50ns 正向电流&#xff1a;20A 反向耐压&#xff1a;1000V 芯片个数&#xff1a;2 引脚数量&#xff1…

场景图生成——RelTR训练自己的数据集

RelTR训练自己的数据集 省流量省时间版本框的标注关系的标注总的 前言Open Images V6的标注格式RelTR中使用的Open Images V6的数据标注格式具体步骤框的标注生成格式关系三元组的生成格式 结束语参考链接 省流量省时间版本 框的标注 共需要创建4个json标注文件 train.json, …

功能升级,数据同步更便捷!场景化数据同步助您提效60%!

在企业数仓建设初期&#xff0c;为了保障数字化转型的落地效果&#xff0c;需要提供充足的数据资源&#xff0c;除了基础的数据抽取、转换和加载等过程&#xff0c;数据的同步也是重要环节之一。数据同步常用于数仓ODS、ADS层的建设&#xff0c;通过不同数据源的同步&#xff0…

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于B…

Michael.W基于Foundry精读Openzeppelin第8期——Context.sol

Michael.W基于Foundry精读Openzeppelin第8期——Context.sol 0. 版本0.1 Context.sol 1. 目标合约2. 代码精读2.1 _msgSender()2.2 _msgSender() 0. 版本 [openzeppelin]&#xff1a;v4.8.3&#xff0c;[forge-std]&#xff1a;v1.5.6 0.1 Context.sol Github: https://gith…

MIT 6.S081 Lab 11 -- NetWork - 下

MIT 6.S081 Lab 11 -- NetWork -- 下 引言代码解析网络子系统初始化相关数据结构lab 分析e1000_transmit函数实现e1000_recv函数实现socket write全流程分析socket read全流程分析socket关闭ARP数据报的发送与接收 引言 本文为 MIT 6.S081 2020 操作系统 实验十一解析。 MIT …

HCIA-datacom认证最新资料共享

hcia认证有哪些值得推荐的学习方向&#xff1f; 入门首选学习方向&#xff1a;HCIA&#xff1a;Datacom&#xff01;但是HCIA云计算&#xff08;Cloud Computing&#xff09;方向、HCIA 无线&#xff08;WLAN&#xff09;方向、HCIA Data Center Facility方向、HCIA 安全(Secur…