#javascript #html #ajax #flask
Вопрос:
У меня есть неупорядоченный список с соответствующими переключателями. После выбора переключателя и нажатия кнопки отправки я хотел бы принять это значение и использовать его в перенаправленном URL-адресе. Форма успешно отправляется, однако возвращаемое ею значение «включено» /операции/включено вместо выбранного фактического значения. Я пробовал это с помощью обычного метода=POST, а также ajax, чтобы вернуть это значение, но безуспешно.
HTML:
lt;form id="warehouse-selection-form" action="/" method="post"gt; lt;input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/gt; lt;div class="tab-content mb-4" id="myTabContent"gt; {% for key, values in warehouses.items() %} lt;div class="tab-pane fade" id="{{ key.lower().replace('-', '').replace(' ', ' ').replace(' ', '-') }}" role="tabpanel" aria-labelledby="{{ key.lower().replace('-', '').replace(' ', ' ').replace(' ', '-') }}-tab"gt; {% for value in values %} lt;label class="btn btn-outline-secondary col-1 text-center rounded px-3 m-1" for="{{ value }}"gt;{{ value }}lt;/labelgt; lt;input type="radio" class="btn-check" name="radio" id="{{ value }}" autocomplete="off"gt; {% endfor %} lt;/divgt; {% endfor %} lt;/divgt; lt;button id="submit" style="display:none;" class="btn btn-primary" onclick="submitWarehouse()"gt;Submitlt;/buttongt; lt;/formgt;
Колба:
@select_warehouse_bp.route("/", methods=["GET", "POST"]) def get_home(): warehouse = request.form['radio'] return redirect(url_for('select_warehouse_bp.get_operations', warehouse=warehouse)) @select_warehouse_bp.route("/operations/lt;warehousegt;", methods=["GET", "POST"]) def get_buildings(warehouse): return render_template("base.html")
АЯКС:
- удалите токен CSRF, если используете этот метод и метод=post
- Я также попытался просто перенаправить с помощью местоположения.href, чтобы избежать возврата на сервер, но не повезло.
function submitWarehouse(){ let warehouse = $('input[name="radio"]:checked').attr('id'); $.ajax({ url: `/operations/${warehouse}`, type: "POST", data: JSON.stringify({warehouse: warehouse}), dataType: 'json', success: function () { alert('success'); }, error: function () { alert('fail'); } }); }
Комментарии:
1. Ты забыл
value="{{ value }}"
в радиотеге.
Ответ №1:
вы не используете атрибут value для своего входного радио-тега, если вы не зададите значение для HTML-радио-входов, оно вернет значение «включено» по умолчанию;