前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)

news2024/11/16 13:26:35

目录

一、前后端同步异步请求

1.同步请求:

2.异步请求:

3.跨域问题(前端问题)

4.axios框架(封装后)

二、后端向前端响应多个数据-JSON


一、前后端同步异步请求

1.同步请求:

        发送一个请求,回应请求,回应的内容会覆盖浏览器中的内容,这样会打断前端其他的正常操作。

2.异步请求:

        不同步,可以使用js中提供的对象,向后发送请求,服务器响应的内容会被js对象接收,在js中接收到的内容,局部更新网页,就不会刷新页面。

        Ajax:无刷新状态更新页面,并且实现异步提交,提升用户体验。利用浏览器提供的一个特殊的对象(XMLHttpRequest)异步地向服务器发送请求 。

3.跨域问题(前端问题)

前后端分离时存在的问题,跨域是指从一个域名的网页去请求另一个域名的资源,只要 协议域名端口有任何一个的不同,就被当作是跨域。

使用Ajax技术前后端交互,前端会默认进行阻止,不让前端接收其他后端的数据。

3.1解决方式:

        后端解决:在响应头中设置说明,告知浏览器,此次的响应是可靠的。

        创建一个过滤器解决跨域问题。

package com.yyds.webback2.filter;

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

@WebFilter(urlPatterns = "/*")
public class CorsFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        //允许携带Cookie时不能设置为* 否则前端报错
        httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
        httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie

        filterChain.doFilter(servletRequest, servletResponse);
    }
}

         配置解决跨域过滤器:

    <filter>
        <filter-name>csf</filter-name>
        <filter-class>com.yyds.webback2.filter.CorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>csf</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

         前端基于Ajax异步交互(原生态):

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			function checkAccount(account){
				var httpobj = new XMLHttpRequest();
				httpobj.open("get","http://127.0.0.1:8080/webBack2/reg?account="+account,true);
				httpobj.send();
				httpobj.onreadystatechange=function(){
					//接收后端响应的数据
					// alert(httpobj.responseText);
					document.getElementById("aid").innerHTML = httpobj.responseText;
				}
			}
			
		</script>
	</head>
	<body>
		<form>
			用户<input type="text" name="account" value="" onblur="checkAccount(this.value)"/><span id="aid"></span><br />
			密码<input type="text" name="psd" value=""/><br />
		</form>
		
	</body>
</html>

        后端响应:

package com.yyds.webback2.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class RegServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Content-Type","text/html;charset=utf-8");
        PrintWriter pt = resp.getWriter();
        String account = req.getParameter("account");
        if (account.equals("admin")){
            pt.write("账号已经存在");
        }else {
            pt.write("成功注册");
        }
    }
}

        效果:

 

4.axios框架(封装后)

官方下载axios.min.js,将包放入前端js文件夹中,然后在前端页面导入使用框架

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/axios.min.js" type="text/javascript"></script>
		<script>
			function checkAccount(account){
				axios.get("http://127.0.0.1:8080/webBack2/reg?account="+account).then(function(resp){
					// console.log(resp.data);
					document.getElementById("aid").innerHTML = resp.data;
				})
				// axios.post("http://127.0.0.1:8080/webBack2/reg","account="+account+"&age=20").then(function(resp){
				// 	document.getElementById("aid").innerHTML = resp.data;
				// })
			}
			
		</script>
	</head>
	<body>
		<form method="post">
			用户<input type="text" name="account" value="" onblur="checkAccount(this.value)"/><span id="aid"></span><br />
			密码<input type="text" name="psd" value=""/><br />
		</form>	
	</body>
</html>

二、后端向前端响应多个数据-JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

将数据封装到对象中响应到前端,首先向后端加载JSON包 :

json包中有ObjectMapper() 类:将封装的对象转为json形式,即转为字符串。

 例如响应一个Student对象:

后端:使用doPost

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Content-Type","text/html;charset=utf-8");
        PrintWriter pt = resp.getWriter();
        String num = req.getParameter("num");
        Student student = new Student(num,"张三","男","12345678910");
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(student);
        System.out.println(s);
        resp.getWriter().print(s);
    }

前端:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/axios.min.js" type="text/javascript"></script>
		<script>
			function checkAccount(num){
				axios.post("http://127.0.0.1:8080/webBack2/reg","num="+num).then(function(resp){
					// document.getElementById("aid").innerHTML = resp.data;
					console.log(resp.data.num);
					console.log(resp.data.name);
					console.log(resp.data.gender);
					console.log(resp.data.phone);
					
				})
			}	
		</script>
	</head>
	<body>
		<form method="post">
			学号<input type="text" name="num" value="" onblur="checkAccount(this.value)"/><br />
			<!-- <span id="aid"></span><br /> -->
		</form>
	</body>
</html>

前端接收到的数据:

 ObjectMapper() 类将student对象转为了json形式,属于String 类,如下:

 

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

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

相关文章

【Java多线程进阶】CAS机制

前言 CAS指的是Compare-And-Swap&#xff08;比较与交换&#xff09;&#xff0c;它是一种多线程同步的技术&#xff0c;常用于实现无锁算法&#xff0c;从而提高多线程程序的性能和扩展性。本篇文章具体讲解如何使用 CAS 的机制以及 CAS 机制带来的问题。 目录 1. 什么是CAS&…

《机器学习算法竞赛实战》-chapter4特征工程

《机器学习算法竞赛实战》学习笔记&#xff0c;记录一下自己的刷题过程&#xff0c;详细的内容请大家购买作者的书籍查阅。 特征工程 特征工程是算法竞赛中工作量最大&#xff0c;决定参赛者能否拿到较好名次的关键部分。吴恩达老师说过&#xff1a;“机器学习在本质上还是特…

Maven Compile时报错 [ERROR] [X Group Enforcer Rules] find DuplicateClasses

类冲突 [ERROR] [Ctrip Group Enforcer Rules] find DuplicateClasses Found in: net.jpountz.lz4:lz4:jar:1.3.0:compile org.lz4:lz4-java:jar:1.7.1:compile Duplicate classes: net/jpountz/xxhash/AbstractStreamingXXHash32Java.class net/jpountz/lz4/LZ4BlockInputStre…

Arduino+ESP8266 MCU开发板 ----带你开发 (TCP)双向局域网通信 项目-----可开发成为小远程控制

目录 本次需要下载的代码链接&#xff1a; 文章项目引用&#xff1a;本次实现可依据之前的文章就行举一反三的操作 本次开发项目步1&#xff1a;下载Aeduino软件 本次开发项目步2&#xff1a; 更替代码片段1 第13行 代替账号和密码 更替代码片段2 第20行 …

软件科技项目验收有哪些注意事项?第三方软件验收测试的好处在哪?

软件科技项目的验收是软件生产周期中非常重要的一个环节。它主要目的是验证软件产品是否满足用户需求&#xff0c;达到预期的质量和性能要求。因此&#xff0c;在进行软件科技项目验收时&#xff0c;有一些注意事项需要遵循。 一、软件科技项目验收的注意事项 1、明确验收标准…

JS使用随机数生成随机验证码

一 随机数测试 在JavaScript中&#xff0c;我们可以使用random&#xff08; &#xff09;方法来生成0&#xff5e;1的一个随机数。random&#xff0c;就是“随机”的意思。需要注意的是&#xff0c;这里的0&#xff5e;1包含0但不包含1&#xff0c;也就是[0, 1&#xff09;。在…

ubuntu20.04 ROS 环境下使用velodyne激光雷达

ROS 环境下使用velodyne激光雷达 系统版本:ubuntu 20.04 ROS版本&#xff1a;noetic 激光雷达型号&#xff1a;velodyne VLP-16 1.系统环境配置 sudo apt install ros-noetic-velodyne #安装ROS依赖 mkdir-p velodyne_ws/src …

PyQt重绘事件处理函数paintEvent

PyQt中的重绘和Windows编程中的重绘差不多&#xff0c;但是Qt的重绘更有特色&#xff0c;更加智能。基础部件类QWidget提供的paintEvent函数是一个纯虚函数&#xff0c;继承它的子类想用它&#xff0c;就必须重新实现它。下列4种情况会发生重绘事件&#xff1a; &#xff08;1…

全网最全的Salesforce营销云管理员认证考点梳理!

Marketing Cloud管理员认证适用于在Marketing Cloud套件中具有设置和维护各种模块&#xff08;Studios/Builders&#xff09;和功能的经验的营销专业人员。Salesforce建议备考者拥有3到6个月的Marketing Cloud管理员和数字营销人员实践经验。 营销云管理员认证 考试内容&#…

IOS发布:App Store Connect Operation Error。SDK Version Issue.

错误描述&#xff1a; App Store Connect Operation Error SDK Version Issue. This app was built with the iOS 15.0 SDK. all iOS apps submitted to the App Store must be built with the iOS 16.1 SDK or later, included in Xcode 14.1 or later. 问题原因&#xf…

ESP32 的多种睡眠模式以及如何让 ESP32 进入深度睡眠模式

ESP32 因其 BLE 兼容性功能以及更低的成本而受到广泛关注。它还带有 32 个 GPIO 引脚和一个 32 位双核 CPU。虽然,它提供了很多功能,但在正常使用模式下似乎很耗电。当应用程序由市电供电时,没有急事,但是当它们由电池供电时,我们必须非常注意 ESP32 的功耗。 ESP32 提供…

SQL使用技巧(6)HIVE开窗函数

专题&#xff1a;SQL使用技巧——实践是检验SQL函数的唯一标准 一.构建数据二.排序开窗三.sum开窗&#xff08;重点内容&#xff09;3.1累加与求和3.2窗口表达式3.3场景模拟 四.count开窗4.1计数规则4.2计数与排序 五.max和min开窗六.lead和lag开窗七.first_value和last_value开…

RabbitMq创建交换机和队列

1. 网页登录 IP:1572 2. 输入登录账号密码 admin admin 3. 点击Exchanges 添加交换机Platform_AlarmEngineInterface 和Rg_Platform_AlarmEngineInterface &#xff0c;Type选择topic 4. 添加队列 VIDEO_Alarm_platform、watch_ftp、RG_VIDEO_Alarm_platform、RG_VIDEO_…

远程进入服务器界面黑屏如何处理?

​  远程登录服务器出现黑屏是很常见的问题&#xff0c;可能是由于多种原因引起的。但不管是哪种原因&#xff0c;当远程连接成功&#xff0c;进入桌面显示黑屏都会让用户感到困扰&#xff0c;无法正常使用服务器。下面我们将为您介绍一些常见的解决方法。 1. 重启远程桌面服…

js深拷贝和浅拷贝

&#x1f449;十分钟学会 前端面试题 js 深拷贝与浅拷贝_前端深拷贝和浅拷贝面试题_Mar-30的博客-CSDN博客 目录 背景&#xff1a; 概念&#xff1a;核心是创建新地址 方法&#xff1a; 浅拷贝&#xff1a; Object.assign() 方法&#xff1a;Object.assign(拷贝的对象&am…

k8s证书过期

[rootmaster1 ~]# kubectl get nodes Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 1.master服务器&#xff1a; # 备份 kubernetes配置 cp -r /etc/kubernetes /etc/kubernetes_bak # 检测证书过期 kubeadm certs…

数智荣耀丨美格智能荣登2023年度中国数智转型标杆企业榜

5月31日&#xff0c;2023数智产业领袖峰会在北京召开&#xff0c;本届大会由智次方—物联网智库主办&#xff0c;大会以大模型时代的“破”与“立”为主题&#xff0c;汇聚产业领袖、专家学者、投资机构、创新企业等各界精英&#xff0c;共同探讨企业如何利用新技术实现“破圈”…

【地平线X3M平台点亮sensor出现问题的分析】

转自地平线论坛经验 1. IC通讯失败的问题以及排查方法。 外界的图像数据一般是通过sensor感知&#xff0c;然后通过mipi接口进入到地平线X3M这款AI芯片的视频处理模块&#xff0c;模块对视频图像做比如放大、缩小、旋转等处理。 问题&#xff1a;IC通讯失败&#xff0c;错误…

手机MT4平台怎么样?手机版MT4平台使用教程教学

外汇是一个全球化的去中心化交易市场&#xff0c;与股票这样只提供一种报价的集中交易不同&#xff0c;在外汇市场中&#xff0c;货币的报价都不是单一的&#xff0c;意味着不同的外汇交易平台的报价会有所不同。以前外汇交易散户是很难进入市场的&#xff0c;参与者主要是银行…

功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码

正文&#xff1a; 功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码下载 后台管理资源本地化带数据和视频教程&#xff0c;这是一款拥有后端的闯关娱乐小程序。支持个人小程序和企业小程序上线运营功能强大齐全,带数据本地化(数据在自己服务器自己管理无需担心第三方失效…