sendRedirect进行页面重定向无反应

news2024/12/23 17:22:27

问题

sendRedirect进行页面重定向无反应

详细问题

笔者使用Servlet+JSP作为技术框架,使用AJAX进行数据请求,后程序运行完成

response.sendRedirect("请求链接");

并没有按照笔者预期,进行页面重定向
请求端核心代码

$.ajax({
  url: "https://example.com/api/data", // 请求发送到的URL
  type: "POST", // HTTP请求方法(GET、POST、PUT、DELETE等)
  data: { // 随请求发送的数据(可选)
    param1: "value1",
    param2: "value2"
  },
  dataType: "json", // 预期的响应数据类型
  success: function(response) { // 请求成功的回调函数
    console.log("请求成功!");
    console.log(response); // 在此处处理响应数据
  },
  error: function(xhr, status, error) { // 请求失败的回调函数
    console.log("请求失败!");
    console.log("错误信息:" + error);
  }
});

服务器端核心代码

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 执行其他逻辑处理

    // 获取要跳转的链接
    String redirectUrl = "/your-target-page.jsp";

    // 使用sendRedirect进行页面跳转
    response.sendRedirect(redirectUrl);
}

解决方案

步骤1、在服务器端,处理完其他逻辑后,返回一个JSON对象,其中包含重定向的URL。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 执行其他逻辑处理

    // 获取要跳转的链接
    String redirectUrl = "/your-target-page.jsp";

    // 构建重定向链接的JSON对象
    JSONObject responseJson = new JSONObject();
    responseJson.put("redirectUrl", redirectUrl);

    // 设置响应内容类型
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");

    // 将 JSON 对象作为响应数据返回给前端
    PrintWriter out = response.getWriter();
    out.print(responseJson.toString());
    out.flush();
}

步骤2、在前端的success回调中,检查服务器返回的JSON对象中是否有redirectUrl字段,并进行页面跳转。

$.ajax({
  url: "https://example.com/api/data",
  type: "POST",
  data: {
    param1: "value1",
    param2: "value2"
  },
  dataType: "json",
  success: function(response) {
    console.log("请求成功!");
    console.log(response);

    // 检查服务器返回的JSON对象中是否有重定向URL
    if (response.redirectUrl) {
      // 执行页面跳转
      window.location.href = response.redirectUrl;
    }
  },
  error: function(xhr, status, error) {
    console.log("请求失败!");
    console.log("错误信息:" + error);
  }
});

产生原因

在使用AJAX进行数据请求时,后台返回的重定向URL无法直接在前端进行页面跳转。这是因为AJAX是一种异步请求技术,它在后台发送请求并处理响应数据,但并不会自动执行页面跳转。

解决原因

通过对服务器端和前端的代码进行相应的调整。在服务器端将重定向的URL封装成一个JSON对象,并将其作为响应数据返回给前端。然后,在前端的AJAX请求的成功回调函数中,检查服务器返回的JSON对象中是否包含重定向URL,并在存在时使用window.location.href进行页面跳转。
通过这种方式,前端可以获取到后台返回的重定向URL,并在接收到响应后根据重定向URL进行页面跳转,从而解决了使用AJAX时无法直接进行页面重定向的问题。

参考文献

产生原因以及解决原因参考chatgpt

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

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

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

相关文章

nginx报403 Forbidden错误

nginx是以root启动的,将 "user nobody" 改为 "user root" 刷新一下配置: /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload

PCL点云处理之细小空洞填补 (一百九十八)

PCL点云处理之细小空洞填补 (一百九十八) 一、算法介绍二、具体实现1.代码2.结果一、算法介绍 点云扫描过程中,由于遮挡或其他原因,可能存在一些细小空洞,有可能造成数据处理上一些问题,这里介绍一种填补细小空洞的方法。具体方法和效果如下所示 二、具体实现 1.代码…

SpringBoot3【⑤ 核心原理】

1. 事件和监听器 1. 生命周期监听 场景:监听应用的生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件; 1.1. 编写SpringApplicationRunListener 这个接口的实现类 1.2. 在 META-INF/spring.factories …

前端Vue组件Mixin技术

前端vue组件开发的一大优势在于可以提高代码的复用性。极大的提升开发效率,通过Mixin技术,我们可以实现类似继承的效果,组件的复用性可以得到加强。 当我们开发前端项目时,可能会定义非常多的组件,这些组件中可能有部…

SpringBoot3【⑥ 场景整合:①NoSQL:Redis】

0. Docker安装 输入如下参数 sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo syst…

Jupyter Notebook的内核添加新的虚拟环境

最近,在搭建环境的时候发现 Jupyter Notebook 的内核只有基础的python和pytorch,现在我想要在 Jupyter Notebook 中使用新的虚拟环境。 下面是解决的方法: (1)首先在Anaconda Prompt中激活虚拟环境,比如我…

Android TV:自定义Leanback的VideoDetailsFragment

在Android studio新建TV项目的demo上做修改,实现一下需求: 1、去掉顶部背景区域 2、修改中间详情区域高度 3、修改整体背景界面 效果如图: 搜遍全网,没有找到一个解决方案。只能考自己看代码来自定义实现了。 1、去掉顶部背景区域: VideoDetailsFragment中重写setupD…

SpringBoot 的 概念、创建和运行

目录 1.什么是Spring Boot? 为什么要学Spring Boot? SpringBoot的优点 Spring Boot 项目创建 前置工作:配置国内源 使用 idea 创建 Spring Boot 项目 网页版创建(了解) 拓展:删除 项目中无用的目录和…

Matlab学习-轨迹热力图绘制

Matlab学习-轨迹热力图绘制 参考链接: MathWork-scatter函数使用 问题需求: 需要将轨迹上的点另一维信息同时显示在图上,比如横纵向误差等,这个时候画轨迹与误差的热力图就能很好同时反应位置和定位误差之间的关系;…

缓冲流~~

1:概述 缓冲流也称高效流,或者高级流。之前学习的字节流可以称为原始流。作用:缓冲流自带缓冲区,可以提高原始字节流,字符流读写数据的性能。 可以提高读写数据的效率。它通过在内存中创建缓冲区来减少对底层数据源的…

MATLAB图像处理实现高光抑制

下面是的几个用MATLAB进行高光抑制的处理例子。 1. 基于最大值滤波的亮光抑制方法 原理是用某像素周围一定大小的邻域中的最大值减去该像素值,可达到亮光抑制的效果。在MATLAB中,可以使用mat2gray函数将图像归一化后,再使用imextendedmax函…

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志 (1)如果Android Studio里面没有安装下列插件之一的,在Settings的Plugins里面安装其中一个: (2)菜单栏中的code里面找到反混…

sphinx pdoc 生成API文档

文章目录 sphinxinstall pdoc sphinx install pip install sphinx sphinx_rtd_theme sphinx-autobuild pip install recommonmark sphinx_markdown_tables sphinx-quickstart 选 y Project language [en]: zh_CN conf.py: import sys sys.path.append(..)extensions [sph…

Word公式大括号左对齐

1、大括号公式如下: 2、依次选中每一行,然后在开头输入一个&,然后回车: 3、当最后一行输入完立马可以发现左对齐了: The higher I got, the more amazed I was by the view.

docker安装maven私服nexus及其配置使用

目录 docker搭建nexus登录私服管理后台重置admin密码 配置仓库 docker搭建nexus 下载 Nexus3 镜像 docker pull sonatype/nexus3创建宿主机挂载目录 mkdir –vp /usr/local/nexus-data记得修改权限 chmod 775 /usr/local/nexus-data创建 Nexus3 容器 docker run --privile…

C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)

C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException) 代码: HttpListener listener new HttpListener(); 错误: System.PlatformNotSupportedException: Operation is not su…

采用匿名内部类形式定义Handler有什么不妥?

写这篇博客,是为分析Handler引起内存泄漏做准备。 目录 匿名内部类的含义是什么?匿名内部类的三种情况非静态内部类为什么会持有外部类的引用? 匿名内部类的含义是什么? 首先是内部类,(内部类不难理解&am…

WPS Office AI实战:一键生成PPT幻灯片

前些天WPS Office AI放出来内测申请,相信不少小伙伴都拿到了体验资格,不知道体验到国产AI的魅力没有?作为写作中的重头戏,一张PPT的制作让不少小伙伴面露难色,单排版布局这一项就足以让人望而却步。 AI 在写作中的应用…

使用EXCEL公式编程从网页获取股票数据并保存到excel

共享文件地址 在dataexcel服务器的 /示例/03函数示例/获取股票数据8.fexm 路径 公式脚本 var urlcelltext("URL");//获取单元格ID为URL的单元格内容 var txtWebGet(url); //从网页获取数据 cellvalue("data",txt); //将获取到的数据库保存到ID为DATA的单…

SSM学习笔记-------MyBatis

MyBatis学习笔记 一、入门二、XML配置1、configuration(配置)2、properties(属性)3、settings(设置)4、typeAliases(类型别名)5、typeHandlers(类型处理器)6、…