当前位置: 首页 > news >正文

【汇总】解决Ajax请求后端接口,返回ModelAndView页面不跳转

【汇总】解决Ajax请求后端接口,返回ModelAndView不跳转

  • 问题发现
  • 问题解决
    • 方法一:直接跳转到指定URL(推荐)
    • 方法二:将返回的html内容,插入到页面某个元素中
    • 方法三:操作文档流
    • 方法四:使用form表单提交(推荐)
    • 方法五:把项目改为前后分离项目,交给前端跳转

问题发现

再开发工作中,可能会有些需求,用到前后端不分离的项目,某项功能可能会,前端发送post请求和参数到后端接口,由后端来确认跳转到指定页面,如果使用Ajax请求就会导致,前端页面不跳转的问题,如图所示,后端将整个页面返回了:

在这里插入图片描述

问题解决

由于 Ajax 的特性,它更适合用于处理局部刷新、异步数据请求和动态内容更新等场景。而页面跳转和整个页面的渲染需要在浏览器中进行处理,这通常不是 Ajax 所擅长的领域。

方法一:直接跳转到指定URL(推荐)

此方法适用于GET请求方式,请求接口,示例代码如下:

window.location.href = "yourUrl/"+id;

网上有很多方法是ajax请求后,跳转指定页面,这种方式跳转的页面,无法直接从后端拿数据,导致前后端是分离的,与现有关系互斥(不推荐)。

方法二:将返回的html内容,插入到页面某个元素中

此方法,视具体业务需求操作,可以再当前页面中插入新的内容,可以不进行页面跳转,但是需要页面跳转的情况就不能使用次方法。

<body><div id="your-element-id"></div>
</body>
$.ajax((url:"/your-backend-api-url'method: 'GET,dataType: "html,success: function(data) {//将返回的HTML$('#your-element-id').html(data);},error: function() {//错误情况}
});

方法三:操作文档流

document.write() 方法可向文档写入文本内容,可以是 HTML 代码。

$.ajax((url:"/your-backend-api-url'method: 'GET,dataType: "html,success: function(data) {document.write(data)},error: function() {//错误情况}
});
  1. 如果在文档加载期间(即在 <script> 标签内或页面加载事件中)第一次调用 document.write(),它会将内容追加到文档的末尾。
  2. 如果在文档加载完成后(例如在点击按钮或其他事件触发时)调用 document.write(),它会直接替换整个文档内容。

不建议使用,这可能会导致意外的结果,特别是在复杂的页面结构中。

方法四:使用form表单提交(推荐)

如果你的请求方式是POST,还需要带一些参数,form表单提交可以解决你的困扰。

<form action="url" method="POST"><!-- 表单输入字段 --><input type="text" name="fieldName" /><!-- 提交按钮 --><button type="submit">提交</button>
</form>

你也可以使用js,创建form表单元素,进行提交,示例代码如下:

	function makeForm(data) {// 创建一个 formconst tempForm = document.createElement("form");tempForm.id = "tempForm";tempForm.name = "tempForm";// 添加到 body 中document.body.appendChild(tempForm);// 创建一个输入框const nameinput1 = document.createElement("input");nameinput1.type = "text";nameinput1.name = 'field';nameinput1.value = field;tempForm.appendChild(nameinput1);// 创建一个输入框const nameinput2 = document.createElement("input");nameinput2.type = "text";nameinput2.name = 'field2';nameinput2.value = field2;tempForm.appendChild(nameinput2);// form 的提交方式tempForm.method = "POST";// form 提交路径tempForm.action = "yourUrl";// 对该 form 执行提交tempForm.submit();// 删除该 formdocument.body.removeChild(tempForm);}

这样请求就可以进行页面跳转了。

方法五:把项目改为前后分离项目,交给前端跳转

上面四种方法都没有帮助你解决此问题,那就把这个问题抛给前端把!!!

在这里插入图片描述

http://www.lryc.cn/news/107533.html

相关文章:

  • 网络安全进阶学习第九课——SQL注入介绍
  • 一个计算机专业的学生数据结构这门课学到什么程度才能算学的还不错?
  • [语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)
  • anaconda创建虚拟环境在D盘
  • Java设计模式之工厂设计模式
  • uniapp使用阿里图标
  • 20230803激活手机realme GT Neo3
  • Spring Cloud Feign+Ribbon的超时机制
  • 使用docker 搭建nginx + tomcat 集群
  • 从Spring的角度看Memcached和Redis及操作
  • 【C语言学习】C语言的基础数据类型
  • 使用AIGC工具提升安全工作效率
  • HBase概述
  • el-popover全屏不显示(bug记录)
  • react中使用redux-persist做持久化储存
  • 【leetcode】203. 移除链表元素(easy)
  • InfiniBand、UCIe相关思考
  • [C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...
  • el-date-picker回显问题解决记录
  • Linux中的特殊进程(孤儿进程、僵尸进程、守护进程)
  • 【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
  • 《cuda c编程权威指南》04 - 使用块和线程索引映射矩阵索引
  • mysql 、sql server 常见的区别
  • 查找特定元素——C++ 算法库(std::find_if)
  • D3JS教程_编程入门自学教程_菜鸟教程-免费教程分享
  • Android入门教程||Android 架构||Android 应用程序组件
  • C语言二进制数据和16进制字符串互转
  • 技术复盘(5)--git
  • GDAL C++ API 学习之路 (5) Spatial Reference System篇 OGRSpatialReference类
  • 2023年华数杯数学建模C题思路代码分析 - 母亲身心健康对婴儿成长的影响