У меня есть форма в моем приложении Flask. Мне нужно, чтобы отправка формы осуществлялась через Javascript (JS). Желаемое поведение заключается в том, что при отправке формы мы получаем немедленное перенаправление, затем JS обращается к Flask, Flask отправляет ответ, JS обновляет DOM.
Проблема: форма не отправляется в JS. При отправке текст в поле ввода очищается, и страница находится там. Нет ошибок войти в консоль
Кажется, что он игнорирует мой JS, хотя теги <script>
в порядке, их размещение в layout.html
правильное, и http://localhost:5000/static/index.js
отображает файл. Я вставил оператор console.log
, чтобы проверить, запускается ли соответствующая функция JS. Ничего не получить. Я вложил все в $(document).ready()
. Еще ничего. Размещение атрибута method="post"
в теге <form>
и атрибута name
в поле input
формы позволило мне напрямую отправлять данные в Flask, но мне нужно перейти в JS. Все это играет на моей машине, поэтому нет CORS. Куда я иду не так?
Форма, которая должна идти в JS, а затем в Flask
<div class="container">
<div class="display-3">
<strong>Create A Channel</strong>
</div>
<form id="channelForm" class="mt-4">
<label for="channelName">Channel Name</label>
<input id="channelName" class="form-control" type="text" placeholder="Enter Channel Name">
<input type="submit" class="btn btn-primary" value="Create Channel">
</form>
</div>
Сокращенный JS
document.querySelector('#channelForm').onsubmit = () => {
console.log("here");
window.location.href = 'messages.html';
// other stuff that links to Flask route
};
Колба по маршруту
@app.route('/channels', methods=["GET", "POST"])
def channels():
channelList = []
if request.method == "POST":
channel = request.form.get("channel")
if not (channel is None) and not (channel in channelList):
channelList.append(channel)
print(channelList)
return jsonify({"success": True, "channel":channelList})
else:
return jsonify({"success": False})
else:
return render_template("channels.html")
Головная секция из layout.html
<head>
{% block head %}
<!-- Bootstrap 4 -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<!-- Additional CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
<!-- JS -->
<script src="{{ url_for('static', filename='index.js') }}"></script>
{% endblock %}
</head>
EDIT
Когда я нажимаю кнопку, чтобы отправить форму, я вижу "GET /static/index.js HTTP/1.1" 200 -
в терминале. Все еще ничего в консоли, но я думал, что запрос GET был необычным, учитывая, что я нажимал кнопку, чтобы отправить форму. Ожидал ПОЧТУ.