Отправить массив с использованием метода POST в Flask

#python #jquery #flask

#python #jquery #flask

Вопрос:

Я создаю веб-сайт с использованием flask, где у меня есть календарь, и когда пользователь нажимает на день, этот день добавляется в массив «выбранные даты», как показано в консоли. введите описание изображения здесь

Затем я пытаюсь создать запрос post при нажатии кнопки, при котором массив отправляется на сервер и применяется некоторая логика. Вот так:

 $("#post_vacations").on("click", function() {
                    alert("hello, world");
                    $.post({
                        url: '/vacations',
                        type : 'post',
                        data: selected_dates
                    })
}); 
  

Проблема здесь в том, что когда я нажимаю кнопку, ничего не происходит. Есть идеи, почему это не работает?

Редактировать:

Обработчик запроса просто перенаправляет пользователя на другой экран. Но при нажатии кнопки браузер остается на том же экране. Однако предупреждение, которое я добавил в свою функцию onclick, работает.

введите описание изображения здесь

Кроме того, flask, похоже, распознает эти запросы «Post», он просто не загружает экран

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

1. Нужны более конкретные детали отладки, чем «ничего не происходит» .

2. Спасибо за ответ! Я добавил больше деталей

3. Похоже, что «ничего не происходит» действительно неверно. Если вы ожидаете, что страница будет перенаправляться, это не так, как работает ajax.

4. Я так считаю. Каков тогда наилучший способ отправить запрос post, передающий выбранный массив дат?

5. Зависит от того, что вы хотите сделать с ответом

Ответ №1:

Прежде всего, проверьте, работает ли onclick вообще, так console.log что-нибудь, чтобы проверить, что он работает. Во-вторых, попробуйте поместить его в FormData объект, например

 $("#post_vacations").on("click", function() {
    let formData = new FormData();
    formData.append('dates', JSON.stringify(selected_dates));
    $.ajax({
        url: '/vacations',
        type: 'POST',
        processData: false,
        data: formData,
        contentType: false,
        cache: false,
    });
});
  

Чтобы получить даты в flask, используйте
request.form['dates']
не забудьте впоследствии преобразовать строку в массив

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

1. Спасибо за ответ! Я использовал оповещение, и появляется окно с сообщением. Я также пробовал ваш код, но все еще безуспешно… Также добавлена дополнительная информация к исходному сообщению. Это странно, потому что я вижу запросы, зарегистрированные в flask, однако он не загружает нужный экран