#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();
}