spring mvc中返回ModelAndView后执行ajax异步请求

起初是想如果返回的ModelAndView在jsp中的对象是否可转为jquery可读的json对象,我想对对象的数据进行单独的处理,其他的数据直接用c标签显示在页面上。但是查资料然后自己试都不行,只能取单独的属性值然后进行处理。全部取出比较麻烦。

后来又有了想法,一部分数据通过返回ModelAndView进行显示,部分数据通过jquery的ajax异步请求进行返回。结果证明这种方法可行,这样我们需要的数据就在一个页面上显示了。然后在这里做一个记录。

因为考虑到很多方法的重用,需要把通用的方法提出来,比如select下拉,几个页面显示的内容都有可能是一样的。

先贴上后台的代码:




view部分配置如下:

  1. <bean id="viewResolver"
  2. class= "org.springframework.web.servlet.view.InternalResourceViewResolver"
  3. p:prefix= "/jsp/"
  4. p:suffix= ".jsp"
  5. />

我的想法是这样的,当对 jsp/getAllUserInfo.do发出请求的时候,返回数据页面,页面通过$(document).ready();来调用js,去异步请求 jsp/getSelect.do,显示异步请求的数据。

贴上前端的代码:

jstl.jsp页面:

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <title>user page </title>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  8. <script type="text/javascript" src="../js/jquery-1.4.4.min.js"> </script>
  9. <script type="text/javascript" src="../js/commons.js"> </script>
  10. <script type="text/javascript" src="../js/jstl.js"> </script>
  11. <script type="text/javascript">
  12. $( document).ready( function(){
  13. getSelect();
  14. });
  15. </script>
  16. </head>
  17. <body>
  18. <h5>${allUserInfo.userInfo.username} </h5>
  19. <h5>${allUserInfo.userInfo.password} </h5>
  20. <h5>${allUserInfo.name} </h5>
  21. <select id="select1">
  22. <c:forEach items="${allUserInfo.list}" var="e">
  23. <option value="${e}">${e} </option>
  24. </c:forEach>
  25. <script>
  26. $( "#select1").val( "${allUserInfo.name}");
  27. </script>
  28. </select>
  29. <p/>
  30. <select id="select2">
  31. </select>
  32. </body>
  33. </html>

ajax异步请求:
  1. function PostJSONQuery(postURL,json, on_success)
  2. {
  3. $.ajax({
  4. url: postURL,
  5. type: "post",
  6. contentType : "application/x-www-form-urlencoded;charset=utf-8",
  7. processData : true,
  8. data: json,
  9. dataType: "json",
  10. success: function(response) {
  11. on_success(response);
  12. },
  13. error: function (xhr, ajaxOptions, thrownError) {
  14. //showAlertInfo("error");
  15. }
  16. });
  17. }

  1. function getSelect(){
  2. alert( "--");
  3. PostJSONQuery( "getSelect.do",{}, function(response){
  4. for( var i= 0;i<response.length;i++){
  5. $( "#select2").append( "<option value="+response[i]+ ">"+response[i]+ "</option>");
  6. }
  7. $( "#select1").val( "晒太阳");
  8. });
  9. }

这里有一个执行顺序问题,首先肯定是返回页面,将view数据显示出来,然后再去页面载入完成后会去调用ajax请求,

所以先会执行:

$("#select1").val("${allUserInfo.name}");

然后执行

alert("--");
最后执行
$("#select1").val("晒太阳");

猜你喜欢

转载自blog.csdn.net/weixin_39214481/article/details/81020244