Асинхронный возврат AJAX после загрузки страницы

#java #jquery #ajax #spring-mvc

#java #jquery #ajax #spring-mvc

Вопрос:

Я использую Spring MVC, и мне нужно выполнить асинхронный вызов сервера только один раз, когда страница JSP загружена полностью.

На самом деле у меня есть контроллер, который возвращает список. Я вызываю контроллер с помощью AJAX. Проблема с моим решением заключается в том, что я не могу получить данные списка после загрузки страницы JSP.

 @RequestMapping(method=RequestMethod.GET, value="/myList")
public ModelAndView getSubView(Model model) 
{
  model.addAttribute("list", userServiceI.getAllUsers());
  return new ModelAndView( "myList" );
}
  
 <script type="text/javascript">
  function ajaxPost() {
    $.ajax({
      type: "GET",
      url: "myList",
      success: function(list) {
        alert(list.get(0).name);
      }
    });
  }
</script>
  

Есть ли какой-либо способ вернуть список после загрузки страницы или как загружать асинхронно? Заранее спасибо.

Комментарии:

1. Откуда вы звоните ajaxPost() ? Если вы вызовете это на document.ready или window.load то, что вам требуется, будет работать нормально

Ответ №1:

Просто верните список пользователей вместо ModelAndView и укажите аннотацию к объекту списка @ResponseBody. Пользователь должен быть сериализуемым, и вы можете вызвать ajax-функцию либо в wiondwos.onload, либо в document.ready, она загрузит список асинхронно.Не возвращайте ModelAndAiew, он используется для перенаправления на странице в случае отправки формы.

Ответ №2:

 You need to return Json you can try it as follows 

@RequestMapping(method=RequestMethod.GET, value="/myList")
public String getSubView(Model model) 
{
   JSONObject json = new JSONObject();
   return json.put("list", userServiceI.getAllUsers());  
}

or you can use @ResponseBody as 

@RequestMapping(method=RequestMethod.GET, value="/myList")
@ResponseBody
public ArrayList getSubView(Model model) 
{
  return userServiceI.getAllUsers();
}