Подобные вопросы уже задавались, например, этот Как мне вернуть представление из пружинного контроллера, используя запрос ajax? , однако ответы не дают мне никакого решения моей проблемы. Я также хочу добавить, что я новичок в развитии веб-интерфейса.
Моя проблема в том, что я вызываю метод контроллера с ajax -скриптом, и после вызова я хочу, чтобы пользователь был перенаправлен в другое представление из контроллера. Однако возвращенное представление не отображается в браузере, вместо этого браузер остается в представлении, из которого запущен скрипт.
Хотя кажется, что оператор return в контроллере работает каким-то образом, потому что в консоли браузера я вижу html, который должен отображаться в окне браузера.
Другая странная вещь заключается в том, что когда я вызываю другие контроллеры в моем проекте с параметрами через thymeleaf, возвращаемые представления отображаются так, как они должны.
Как я могу направить представление "recipesOverviewPage" из контроллера, чтобы оно отображалось в браузере, а не как html -tags в консоли.
Мой скрипт:
const sendArray = function() {
var ingredientNames = [];
$('#insertedFoodsList li').each(function(index) {
ingredientNames.push($(this).text());
});
ingredientNames = JSON.stringify({
'ingredientNames': ingredientNames
});
$.ajax({
url: "/foo",
type: 'POST',
data: ingredientNames,
dataType: "html",
contentType: 'application/json',
mimeType: 'application/json',
success: function(data) {
console.log(data);
return false;
}
});
};
Кнопка, которая запускает событие:
<div class="btn" value="Submit" onclick="sendArray();" style="margin-left: 9em">Generate recipe</div>
Контроллер:
@RequestMapping(value = "/foo", method=RequestMethod.POST)
public String getSearchedRecipesFromIngredientInputField(@RequestBody RecipeSearchObject recipeSearchObject, Model model) {
model.addAttribute("recipeList",recipeService.getRecipesByIngredientList(recipeSearchObject.getIngredientNames()));
return "recipesOverviewPage";
}