当前位置: 首页 > 知识库问答 >
问题:

对Spring MVC的Ajax POST调用

白子昂
2023-03-14

这个问题是ajax Spring mvc中返回模型和视图的后续

因为唯一的答案是我们需要从控制器返回json,而不是Model AndView。所以问题是

  • 如何返回ModelAndView
  • 如何呈现页面:-
    • 它必须在ajax调用的成功部分处理吗
    • 或者Spring Controller将像在Spring MVC中那样返回页面

    更新1:如前所述,我尝试了示例。这是我的代码。

    @Controller
    public class AppController 
    {
    
    @RequestMapping(value="/greeting",method=RequestMethod.POST)
    @ResponseBody
    public ModelAndView getGreeting(@RequestBody String json) throws IOException
    {
        JSONObject inputjsonObject = new JSONObject(json);
        String name = inputjsonObject.getString("name");
        ModelAndView modelAndView = new ModelAndView();
        String result = "Hi "+name;
        modelAndView.addObject("testdata", result);
        modelAndView.addObject("user", getPrincipal());
        modelAndView.setViewName("greetingHtmlPage");
        return modelAndView;
    }
    // other stuff
    }
    

    在上述控制器方法中,我可以成功地获取数据。这个方法是从home.html上的javascript调用的。下面是javascript函数

     function callGreeting(){
                var nameData={
                        name :  document.getElementById("name").value
                    }
                var dataInJson = JSON.stringify(nameData);
                var csrf_token = document.getElementById("token").value;
                $.ajax({
                type: 'POST',
                url: "greeting",
                data: dataInJson,
                cache:false,
                beforeSend: function(xhr) { 
                    xhr.setRequestHeader('X-CSRF-Token', csrf_token);
                    xhr.setRequestHeader("Accept", "application/json");  
                    xhr.setRequestHeader("Content-Type", "application/json");  
                },
               success: function (response) {
                   document.open();
                    document.write(response);
                    document.close();
                },
                error: function (data) {
                    alert("failed response");
                }
            }); }
    

    我已成功渲染页面。但即使在加载新页面之后,应用程序的url也不会从AjaxSpringMVC:8080/home更改为AjaxSpring MVC:8080/heeting。如果在不使用Ajax的情况下使用,Spring MVC中会发生这种情况。

共有1个答案

席俊
2023-03-14

如何返回ModelAndView?

您可以像往常一样返回Model AndView:

public ModelAndView returnView( Model model ) {
    model.addAttribute( "myStaff", "my staff as string" );

    return new ModelAndView( "myView" );
}

页面的呈现方式:

您可以控制它的呈现方式。当您返回<code>ModelAndView</code>时,响应会有一个HTML页面。在Ajax调用之后,您可以执行$(“#container”)。html(response)或类似的东西,以便在任何地方显示html页面。

换句话说,您从控制器获得了一整页html内容。

然而,我强烈建议您只返回json对象并用json对象更新您的视图。Ajax主要用于通过异步更新视图的一部分来创建良好的用户体验,所以用Ajax获得整个页面对我来说没有意义。

如何在Controller中读取来自ajax的post数据

有很多方法,我喜欢将json体直接发送到控制器

@ResponseBody
@RequestMapping(value = "/saveObj", method = RequestMethod.POST, consumes = "application/json")
public String saveObj(Model model, @RequestBody MyObj myObj) {
    // do staff..
}
 类似资料:
  • 我正在尝试将一个jsp表单放入fancybox,我的站点功能正常,所以我知道我的大部分配置都是正确的。我还做了一个图像的样例测试,它工作得很好,但是对于一个表单,我有问题。下面是代码:

  • 本文向大家介绍SpringMvc微信支付回调示例代码,包括了SpringMvc微信支付回调示例代码的使用技巧和注意事项,需要的朋友参考一下 介绍 大家都知道微信支付的回调链接要求不能跟参数,但又要接收返回的xml数据。我开始使用@RequestBody注解在参数上,希望能获取xml数据,测试失败。最后使用HttpServletRequest去获取数据成功了。 示例代码 总结 以上就是这篇文章的全部

  • 龙果开源-后台管理系统 项目介绍 框架完全是基于Spring IO platform,绝对拥抱Spring,版本的依赖关系再不用担心。 前端基于 龙果开源-后台管理UI Roncoo AdminLTE,高端大气上档次。 实现了邮件发送功能,邮件增删改查功能 代码自动生成工具使用了龙果开源-Mybatis代码自动生成工具 项目愿景 根据实际项目的需求,实现一个适合由单应用扩展到多应用的架构。在项目的

  • 我正在通过在线示例学习使用FreeMarker的SpringMVC。我遇到了这个错误,但是我不知道我的getFreemarkerConfig()方法有什么问题,一整天我都在试图修复它,但是没有成功。

  • 我已经获得了我的访问令牌,但我很难看到您然后如何发送所需数据的请求。在示例中,调用Microsoft Graph可以:

  • 我正在编写一个Servlet-Filter,它包装响应并分析对包装响应的addHeader()的调用。在将响应提交给客户机之前,如果合适的话,它会用一些有用的完整头(缓存、压缩等)装饰它。 我能想到的唯一方法是包装请求,捕获对servletRequest.getRequestDispatcher()的调用,并返回一个包装好的RequestDispatcher实例,当调用include-method

  • 问题 你想调用一个对象上的多个方法,但不想每次都引用该对象。 解决方案 在每次链式调用后返回 this(即@)对象 class CoffeeCup constructor: -> @properties= strength: 'medium' cream: false sugar: false

  • 我试图在我的数据库中保存一个json对象。未调用save()函数,但从未保存json对象。帮我解决这个问题。我想这是猫鼬的连接问题。这是我的密码。。 我的控制台日志:: 新增用户api命中!!json的内容是: 143没有userrs: 144 db中的用户计数已更新!!这个人生成的id是:ipkoID_C144调用保存函数obj::{"name":"Abhi","密码":"jio","usern