繁体   English   中英

在ajax调用后重定向到另一个jsp(带有响应数据)

[英]Redirect to another jsp (with response data) after ajax call

在调用成功执行后,我正在使用ajax调用获得一些位置,我想将该数据传递给另一个jsp并在那里显示。 我的代码是

阿贾克斯电话

 $(".savebutton").click(function(){
            $.ajax({        
                url: "<c:url value='/findPlaces' />",
                type: 'POST',            
                data:{  
                    preferences : preferences
                },
                success: function(response) 
                {
                    console.log(response);
                    window.location.href = "places";;
                }, 
                error: function(xhr, ajaxOptions, thrownError) {
                    alert('Error');
                }
            });
        });

控制器动作

 @RequestMapping(method = RequestMethod.POST, value = "/findPlaces")
public ModelAndView findRecommnededPlaces(HttpServletRequest request) {

    Map< String, Integer> userPreferences = new HashMap< String, Integer>();
    Map< String, Integer> sortedUserPreferences = new HashMap< String, Integer>();

    userPreferences.put("Museum", Integer.parseInt(request.getParameter("preferences[Museum]")));
    userPreferences.put("Night Life", Integer.parseInt(request.getParameter("preferences[Night Life]")));
    userPreferences.put("Food", Integer.parseInt(request.getParameter("preferences[Food]")));

    userService.scalePreferences(userPreferences);  
    sortedUserPreferences = userService.sortPreferences(userPreferences);

    Map< String, Map< String, Integer >> categorisedPlaces = new HashMap< String, Map< String, Integer >>();
    Map<String , List<String>> recommendedPlaces = new LinkedHashMap<String, List<String>>();

    List<Place> places = searchService.search(new Location(SOURCE_LATITUDE,SOURCE_LONGITUDE), new Location(DEST_LATITUDE,DEST_LONGITUDE));      
    categorisedPlaces = placesService.categorize(places);
    recommendedPlaces = placesService.getRecommendedPlaces(sortedUserPreferences, categorisedPlaces);

    ModelAndView model = new ModelAndView("places");
    model.addObject("recommendedPlaces", recommendedPlaces);
    return model;
}

places.jsp

<div id="content">
        <c:forEach var="entry" items="${recommendedPlaces}">
            Cat:  ${entry.key} <br/>
            Places: ${entry.value}<br>
        </c:forEach>
    </div>

我如何重定向到place.jsp并将recommndedPlaces传递到那里,目前在ajax响应中,我正在获取整个html页面

我不明白您为什么要在AJAX进行调用,因为您毕竟想将用户重定向到另一个页面...无论如何,要以JSON而不是HTML页面的JSON获取recommendedPlaces@ResponseBody ,请使用@ResponseBody批注并返回Map而不是ModelAndView对象:

@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/findPlaces")
public Map<String, List<String>> findRecommnededPlaces(HttpServletRequest request) {

    Map< String, Integer> userPreferences = new HashMap< String, Integer>();
    Map< String, Integer> sortedUserPreferences = new HashMap< String, Integer>();

    userPreferences.put("Museum", Integer.parseInt(request.getParameter("preferences[Museum]")));
    userPreferences.put("Night Life", Integer.parseInt(request.getParameter("preferences[Night Life]")));
    userPreferences.put("Food", Integer.parseInt(request.getParameter("preferences[Food]")));

    userService.scalePreferences(userPreferences);  
    sortedUserPreferences = userService.sortPreferences(userPreferences);

    Map< String, Map< String, Integer >> categorisedPlaces = new HashMap< String, Map< String, Integer >>();
    Map<String , List<String>> recommendedPlaces = new LinkedHashMap<String, List<String>>();

    List<Place> places = searchService.search(new Location(SOURCE_LATITUDE,SOURCE_LONGITUDE), new Location(DEST_LATITUDE,DEST_LONGITUDE));      
    categorisedPlaces = placesService.categorize(places);
    recommendedPlaces = placesService.getRecommendedPlaces(sortedUserPreferences, categorisedPlaces);

    return recommendedPlaces;
}

使用success函数中的当前代码,在响应对象中返回的recommendedPlaces将不会发送到places.jsp页面。 您需要通过使用表单或将其添加到URL将其添加到请求中。 这就是为什么我不太了解您为什么为此请求使用AJAX的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM