javascript - 如何从 spring mvc Controller 获取 jQuery $.post 的 POST 请求参数?

标签 javascript java jquery spring-mvc post

我需要在页面上动态加载数据库中的数据,而不需要重新加载任何页面。

我的JSP代码是这样的:

<script>
$(document).ready(function() {
    $("#ClassNext").click(function(event){
        var data = {};
        var classArray = [];
        $.each($("input[name='classCheckbox']:checked"), function(){            
            classArray.push($(this).val());
        });
        console.log(classArray);
        data["list"] = classArray;
        data["var"] = "1";
        console.log(data);
        $.post('PopulateClassSample',data,function(responseJson){
            if(responseJson!=null){
                $.each(responseJson,function(key,value){
                    // do something
                })
            }
        })
    })
});
<script>
<c:forEach items="${classList}" var="Class">     
    <li>
        <input class="classCheckbox" type="checkbox" name="classCheckbox" value="${Class.classStart}"></input>
        <c:out value="${Class.showString}"/>
        <button style="display: none;" id="${Class.classStart}">Edit</button>
    </li>
</c:forEach>

<button id="ClassNext">Next</button>

这里我发布了一个请求,通过 jQuery POST ($.post) 从数据库中提取一些信息。我期望响应为 JSON 对象,其中包含来自数据库的信息。 data 变量是一个包含两个字段的对象 - 一个字段包含一个字符串数组,另一个字段包含一个字符串。这个data变量通过javascript正确获取其所需的值。

在 Controller 中捕获此请求的方法:

@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST)
    @ResponseBody
    protected void SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start, HttpServletResponse response) throws IOException
    {
        for(String s:list){
            System.out.println(s);

        }
        System.out.println(start);
        /*

        ArrayList<AcademicClass> classList = new ArrayList<AcademicClass>();
        DataAccess db = new DataAccess();
        classList = db.getClassList();
        Gson gson = new Gson();
        JsonElement element = gson.toJsonTree(classList,new TypeToken<List<AcademicClass>>() {}.getType());
        JsonArray jsonArray = element.getAsJsonArray();
        response.setContentType("application/json");
        response.getWriter().print(jsonArray);
        */
    }

在 DataAccess 类中,我正在执行所有数据库查询并通过其方法返回结果。我在这里需要 HttpServletResponse 对象,因为我会将一些内容作为 JSON 对象返回到 jQuery 代码。 但我在控制台中收到这样的错误:

jquery.min.js:4 POST http://localhost:8080/Mytuition/PopulateClassSample 400 ()

Controller 方法中的初始打印不会被执行。

我尝试声明一个单独的模型类(它有两个字段 - 一个字符串的 ArrayList 和一个字符串)并使用 @ModelAttribute 注释。但后来我遇到了这样的异常:

java.lang.NumberFormatException: For input string: ""

有没有办法不用@ModelAttribute注释来做到这一点?即使我使用 @ModelAttribute 注释,为什么这不起作用?

注意:我肯定会向 JSP 返回一些内容。该部分被注释掉仅用于测试目的。

最佳答案

你的 Controller 方法是错误的。如果您正在对服务器进行 Ajax 调用并且需要从服务器检索 JSON 响应,则只需执行 2 件事。

  1. 使用 @ResponseBody 在 Controller 中定义您的方法。然后 Spring 会将您返回的对象转换为 JSON 格式

  2. 将一些对象返回到 View 。您正在返回“void”

应该是这样的

@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST)
    @ResponseBody
    protected List<AcademicClass> SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start) throws IOException
    {
        /** DO your staff here and return the AcademicClass list */
        System.out.println(start);
        DataAccess db = new DataAccess();
        return db.getClassList();
    }

关于javascript - 如何从 spring mvc Controller 获取 jQuery $.post 的 POST 请求参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573236/

相关文章:

javascript - jQuery 将一个 div 的高度设置为另一个的 'dynamic height'

java - 将单个文件包含在 Java VM 的 -classpath 参数中是否正确?

java - 与 Java 或其他非函数式语言相比,Scala 究竟如何利用更多的核心?

jquery - jQuery 数据应该是可链接的吗?

php - 将焦点放在 img src 上

javascript - 附加到 localForage 中的数组

java - NULL 上的方法调用工作正常 - 期待 NPE

javascript - 如何在按钮单击时检查 javascript 中的许多自定义函数中最后调用的是哪个函数?

javascript - Bootstrap One Page Navigation Fluid 站点最小化问题

javascript - 在不同的列中显示 JSON 结果 Angular JS