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

这篇具有很好参考价值的文章主要介绍了前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、前后端同步异步请求

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("成功注册");
        }
    }
}

        效果:

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

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

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包 :

前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(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>

前端接收到的数据:

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

 ObjectMapper() 类将student对象转为了json形式,属于String 类,如下:前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)

 文章来源地址https://www.toymoban.com/news/detail-466036.html

到了这里,关于前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ajax请求跨域问题及其解决方案

            我们的传统请求,比如说超链接、form表单,js代码以及直接在浏览器地址栏上写请求地址都不存在跨域问题,能够从一个网站访问另外一个网站,但是我们的Ajax请求会存在跨域问题,其主要是为了解决跨域访问带来的安全隐患。因为浏览器中有一个内置对象XMLH

    2024年02月06日
    浏览(37)
  • AJAX和Axios异步框架

    AJAX:Asynchronous JavaScript And XML 异步的JavaScript和XML 作用:1、与服务器进行数据交换,通过AJAX可以给服务器发送请求,并获取服务器响应数据。使用了AJAX和服务器进行通信,就可以使用ajax和html来代替jsp页面了。这样可以实现将前后端进行分离,因为jsp需要依赖浏览器才能运行

    2024年01月19日
    浏览(31)
  • Java网络开发(Asynchronous异步)—— 从 Jsp 到 Ajax 的 axios 到 vue & 同步请求 到 异步请求

    如果想做bilibili那样的边看视频边评论怎么搞?; 之前用jsp的方式,是无法实现这个需求的,因为每次评论后提交了评论,会把整个页面全部刷新,导致视频也回到未播放的初始状态,如下所示: 代码为: 这是因为,在每次浏览器请求后,只能等待服务器的响应,即这种方

    2024年02月09日
    浏览(31)
  • 前端同步异步讲解--Ajax(axios进阶)的相关操作

    之前我们讲到了数据在前后端传输是依赖xml文件,但是由于时代变迁,他也已经比逐步淘汰,json对象就逐步开始作为数据传输通道的桥梁,忘记的话可以去回顾文章对应的json对象 最全的前端知识之css与jsp介绍-CSDN博客 文章浏览阅读1k次,点赞31次,收藏21次。ok了,宝子们,

    2024年02月21日
    浏览(31)
  • 【Vue.js】Vue3全局配置Axios并解决跨域请求问题

    对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错: Access to XMLHttpRequest at \\\' http://localhost:8081/login \\\' from

    2024年02月05日
    浏览(45)
  • 前端开发中的ajax请求、axios封装

    目录 浏览器http请求 同步 js标签跨域、url 异步ajax、websock协议 ajax是异步的技术术语,最早的api是xhr(XMLHttpRequest) fetch es6 api axios 封装axios(无论用requst还是axios请求都会生效) src/utils/request.ts请求/响应拦截器封装 ts post请求request.post(url)和 通用请求request({url,method:\\\'post\\\'})对象

    2024年02月11日
    浏览(30)
  • 前端如何中断请求 ( axios、原生 ajax、fetch)

    使用场景 在前端开发中,我们经常需要中断请求来优化性能或处理特定的业务需求。以下是一些常见的使用场景: 比如 重复请求:当页面中多个组件并发调用同一个接口时,在第一个请求返回后,我们可能需要中断其他组件对该接口的调用,以避免重复请求和冗余数据。这

    2024年02月04日
    浏览(34)
  • 前端终止请求的三种方式(ajax、axios)

    一、原生ajax终止请求 1、abort() ​ XMLHttpRequest.abort() 方法用于终止 XMLHttpRequest 对象的请求,该方法没有参数,也没有返回值。当调用该方法时,如果对应 XMLHttpRequest 对象的请求已经被发送并且正在处理中,则会中止该请求;如果请求已经完成(即已经接收到完整的响应),则

    2024年02月09日
    浏览(32)
  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】

    前言:什么是跨域,网上一搜一大把,所以这里直接跳过,直入主题。 处理方式:不通过后端处理跨域,通过前端+服务器nginx处理。 1.前端涉及处理跨域的必要配置(开发环境、生产环境):vite3、vue3、axios 2.服务器涉及处理跨域的配置(生产环境):nginx【主要用到其配置

    2024年02月01日
    浏览(37)
  • 前端请求数据方法 —— Ajax、Fetch、Axios、Get、Post

    Ajax :( “Asynchronous JavaScript and XML”(异步JavaScript和XML)的缩写)是一组Web开发技术,Ajax不是一种技术,而是一个编程概念。AJAX 这个词就成为 JavaScript 脚本发起 HTTP 通信的代名词,也就是说,只要用脚本发起通信,就可以叫做 AJAX 通信。 技术实现 用于演示的HTML(或 XHTML)和

    2024年01月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包