我需要在页面上动态加载数据库中的数据,而不需要重新加载任何页面。
我的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 件事。
使用 @ResponseBody 在 Controller 中定义您的方法。然后 Spring 会将您返回的对象转换为 JSON 格式
将一些对象返回到 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/