Получение переменной из js в python
У меня есть выпадающий список, выбранные элементы которого записываются в переменную, которую я вывожу в консоль. Такой вопрос:
Как реализовать получение переменной(selectedItem.value) из js во flask python?
app.py:
description = ['one','two','three','four','five','six']
@app.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
docs = request.form.getlist('sel')
return render_template('login.html', description=description)
return render_template('login.html', description=description)
login.html
<select id='sel' name='sel' class="selectpicker" multiple data-live-search="true" onchange="printValue(this)">
{% for desc in description %}
<option value="{{desc}}">{{desc}}</option>
{% endfor %}
</select>
<p id="mySelectedValue" style="margin-top: 10px;"></p>
<script type="text/javascript">
function printValue(selectedItem){
$('#mySelectedValue').html(selectedItem.value);
console.log(selectedItem.value);
}
function process(index) {
$.ajax({
url: "/login/",
type: "post",
dataType: "json",
success: function (data) {
alert(data);
},
data: {"selectedItem.value": selectedItem.value}
});
}
</script>
Полный код тут
Ответы (1 шт):
Автор решения: AivanF.
→ Ссылка
Клиентская часть:
<select id='sel' name='sel' class="selectpicker sel" multiple data-live-search="true" onchange="optionClick(this)">
{% for descr in description%}
<option id="val" value="{{descr}}">{{ descr }}</option>
{% endfor %}
</select>
<!-- Данные можно отправлять по кнопке -->
<button type="button" class="btn btn-primary" onclick="process();">
Process
</button>
<script type="text/javascript">
function printValue(selectedItem) {
$('#mySelectedValue').html(selectedItem.value);
console.log(selectedItem.value);
}
function process(selectedItem) {
const data = JSON.stringify({
"selectedItems": $('#sel').val()
});
$.ajax({
url: "/",
type: "POST",
contentType: "application/json",
data: data,
success: function (data) {
console.log(data);
},
});
}
function optionClick(selectedItem) {
printValue(selectedItem);
// Или можно отправлять в любой другой момент
// process();
}
</script>
Серверная часть:
from flask import Flask, request, render_template, jsonify
app = Flask(__name__)
description = ['one','two','three','four','five','six']
# Браузер обращается по пути "/", но с методом GET
@app.route('/', methods=['GET'])
def login():
if request.method == 'POST':
docs = request.form.getlist('sel')
return render_template('login.html', description=description)
return render_template('login.html', description=description)
# Из скрипта мы обращаемся по тому же пути, но методом POST
@app.route('/', methods=['POST'])
def login_post():
data = request.json
print('Got data:', data)
return jsonify({
'status': 'SUCCESS',
'data': data,
})
if __name__ == '__main__':
app.run()