2 回答
TA贡献1827条经验 获得超4个赞
除了Roko的答案,您还必须想出一种解决方案来刷新ui,以便在不刷新整个页面的情况下更改按钮图像,因为您使用的是服务器端渲染模板引擎。我建议您在成功响应后,只需更改按钮的图像,如下所示:
$('#test').on("submit", function (e) {
e.preventDefault();
$.post(this.action, function(data) {
console.log(data);
var imageUrl = (data.favorited)?'/assets/images/favorited.svg':'/assets/images/favorite.svg';
$('#favorite-button-index>img').attr('src', imageUrl);
});
};
同样在这种情况下,为了data.favorited工作,您应该从spring控制器方法返回有关用户是否喜欢的数据。这是一个返回json数据的示例,因此您可以轻松地在javascript中使用它:
@PostMapping("/recipes/{id}/favorite")
@ResponseBody
public Map<String, Object> favoriteRecipe(@PathVariable("id") Long id, Authentication authentication) {
User user = userService.findByUsername(authentication.getName());
Recipe recipe = recipeService.findById(id);
userService.toggleFavorite(user, recipe);
userService.save(user);
boolean hasFavorite = recipe.userFavorites.contains(authentication.getName());
Map<String, Object> resultJson = new HashMap<>();
resultJson.put("favorited", hasFavorite);
return resultJson;
}
添加回答
举报