当我将 Spring MVC 与“传统”(非 AJAX,每次单击按钮后页面重新加载)网站/应用程序一起使用时,我通常会定义一个 Controller :
@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public ModelAndView updateThreshold(@RequestParam("x") String whatever) {
ModelAndView mav = new ModelAndView();
max.setView("someView");
// Inject some models into the view.
return mav;
}
然后我编写一个 JSP View (someView.jsp
) 并让它使用由 Controller “注入(inject)”的 Spring 标签/模型。
但是使用 jQuery,您会触发 GET/POST 请求,并期望简单地更新 DOM 的某些部分。我想知道两件事:
- 使用 jQuery,Spring MVC Controller 设置 (
mav.setName(...)
) 并返回什么“ View ”?换句话说,没有新的“ View ”,因为它是对同一页面/ View 的 AJAX 调用。 jQuery 结果只需要更新现有的页面/ View 。 - 如果出现服务器端错误(即,某些
@RequestParam
具有非法值),MVC Controller 如何返回一条错误消息,然后 jQuery 可以使用该消息并将其显示给最终用户?
我是一个视觉学习者,所以代码片段(客户端 jQuery 和服务器端 Controller / View )非常非常感谢!提前致谢!
最佳答案
Spring MVC 不关心请求是“传统”请求还是 AJAX 请求。除了一些潜在的附加 header 外,两种类型的请求完全相同。
因此,如果您需要使用 AJAX 请求刷新页面的一部分,您可以像处理“传统”页面一样使用 Controller ,然后转发到为该部分生成标记的 View 必须刷新的页面。因此,不是生成完整的 HTML 页面,而是来自 <html>
至 </html>
, View 只会生成页面的一部分。
您还可以发送使 Controller 返回 HTML 标记以外的内容:例如 XML 或 JSON。在这种情况下,处理响应的 JavaScript 函数将使用接收到的数据并更新页面 DOM。
错误的处理方式也与“传统”请求完全相同。如果有500
例如,处理 AJAX 响应的 JavaScript 代码会执行它认为合适的操作。例如,显示警报弹出窗口或类似内容。
关于java - Spring MVC Controller 将什么发送回 jQuery get/post 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602315/