对 Spring Boot 控制器的 Ajax 调用以重定向视图
Posted
技术标签:
【中文标题】对 Spring Boot 控制器的 Ajax 调用以重定向视图【英文标题】:Ajax call to spring boot controller to redirecting a view 【发布时间】:2019-01-28 22:35:12 【问题描述】:我是 Spring Boot 框架的新手。 我有一个 jQuery 方法,它在单击 span 元素时被调用。在那个 jQuery 方法中,我有一个 ajax 调用,它调用 Spring Boot 控制器并将字符串作为参数传递。控制器正在获取从 ajax 调用传递的参数。但它并没有重定向到不同的视图。不同的视图是一个名为 ajaxView.html 的 html 页面。我也想为视图添加一个属性。任何帮助都会很棒。
这是我的 ajax 调用:
$(document).ready(function()
$('.spanClass').on('click', '#id_1', function(event)
event.stopPropagation();
var str = ((event.target.parentElement).parentElement.href);
$.ajax(
type: 'POST',
url: "http://localhost:8080//span/view?term="+encodeURIComponent(str),
contentType: 'text/plain',
crossDomain: false,
async:true,
success:function(response)
);
);
);
这是我的控制器方法:
@RequestMapping(method=RequestMethod.POST, value = "/span/view")
public @ResponseBody ModelAndView redirectAjax(String term, Model model)
Employee emp = new Employee();
emp.setName(term);
model.addAttribute("employee", emp);
return new ModelAndView("redirect:/ajaxView");
【问题讨论】:
您不能从 AJAX 重定向到不同的 PAGE。您只需要通过脚本来处理它。 ***.com/questions/19346430/… 【参考方案1】:您需要从您的 Ajax 成功函数中再次调用控制器来为您打开 ajaxView.html 页面。 :--
1.) 你的 ajax 调用应该是这样的:--
$.ajax(
type: 'POST',
url: "http://localhost:8080//span/view?term="+encodeURIComponent(str),
contentType: 'text/plain',
crossDomain: false,
async:true,
success:function(response)
window.location = '/yourAjaxControllerName';
);
2.) 你的控制器:--
@RequestMapping("/yourAjaxControllerName")
public String getAjaxViewPage(HttpServletRequest request,Model model)
return "ajaxView";
【讨论】:
【参考方案2】:您需要在 Ajax 本身中执行此操作。
在Ajax调用成功方法中需要重新发送响应。
$(document).ready(function()
$('.spanClass').on('click', '#id_1', function(event)
event.stopPropagation();
var str = ((event.target.parentElement).parentElement.href);
$.ajax(
type: 'POST',
url: "http://localhost:8080//span/view?term="+encodeURIComponent(str),
contentType: 'text/plain',
crossDomain: false,
async:true,
success:function(emp)
alert(emp);
window.location.href = '/JspControllerHandler?employee='+ JSON.stringify(emp); // redirect //this would be GET
);
);
);
您的控制器会将员工数据返回给请求 Ajax。
@RequestMapping(method=RequestMethod.POST, value = "/span/view")
public @ResponseBody Employee redirectAjax(String term, Model model)
Employee emp = new Employee();
emp.setName(term);
return emp;
您的 Ajax 将负责重定向到另一个页面
@RequestMapping("/JspControllerHandler")
public String redirectJsp(HttpServletRequest request,@RequestParam("employee") String empStr)
Employee employee = null;
try
ObjectMapper mapper = new ObjectMapper();
employee = mapper.readValue(empStr, Employee.class);
model.addAttribute("employee", employee );
catch(Exception ex)
System.out.println("Error while converting JSON string to employee object.");
ex.printStackTrace();
return "jspView";
【讨论】:
太棒了!但是如何访问从 window.location.href = '/JspControllerHandler?employee='+ emp; 传递的变量“emp”在控制器中,redirectJsp ?当我尝试访问 emp 属性时,我得到了 null 值。仅供参考 ajax 中的 emp 属性不为空。 @khalbali 代码已更新。立即尝试 它不起作用。 emp 是一个对象。而且我想将其保留为对象而不是将其转换为字符串。我打算将该对象作为模型属性传递给 jspView.html 页面。 @khalibali 代码已更新。问题是您需要将该 JSON 转换为 Object 并传递给 spring 模型以上是关于对 Spring Boot 控制器的 Ajax 调用以重定向视图的主要内容,如果未能解决你的问题,请参考以下文章
Jquery Ajax 调用 + Spring boot 控制器 = 日期修改
带有模型和百里香叶的 Spring Boot Ajax 发布表单提交
如何将 JQuery AJAX 请求中的字符串值传递给 Spring Boot 控制器?
Spring Boot Serverless 实战系列 | 性能调优
Ajax 调用在 Spring Boot 中返回值为 JSONArray.fromObject(data) 时给出错误 500