【发布时间】:2016-08-19 13:39:18
【问题描述】:
如何根据之前的选择动态更新多个下拉菜单? (此代码只有三个下拉菜单,但最终我会再添加 2 个)。
问题:第二个下拉列表(category_2)正确读取了第一个的值,并且只传递了一个不等于第一个值的列表(通过 json)。但是,我不知道如何将 category_1 和 category_2 值都传递给第三个下拉列表。
(注意,如果有帮助,我可以包含模板页面和表单代码。现在,我希望有人可以帮助诊断发送两个变量或 json 字符串的正确方法。
这是我的代码: App.py 导入json 从烧瓶进口烧瓶,请求,render_template,make_response 从表单导入 TestForm 导入json
app = Flask(__name__)
app.config['SECRET_KEY'] = "my precious"
extra = ['Product_Type','Geography','Third']
@app.route("/category", methods=["GET", "POST"])
def index():
"""
Render form and handle form submission
"""
form = TestForm(request.form)
form.category_1.choices = [('', 'Select a Category')] + [(x) for x in enumerate(extra,1)]
chosen_category_1 = None
chosen_category_2 = None
chosen_category_3 = None
return render_template('index.html', form=form)
@app.route("/category/<int:category_1_id>/", methods=["POST"])
def get_request(category_1_id):
data = [(x) for x in enumerate(extra,1)
if x[0] != category_1_id]
response = make_response(json.dumps(data))
response.content_type = 'application/json'
return response
if __name__ == "__main__":
app.run(debug=True)
JS
$(function() {
// test to ensure jQuery is working
console.log("whee!")
// disable refresh button
$("#refresh-btn").prop("disabled", true)
$("#category_1_select").change(function() {
// grab value
var category_1_id = $("#category_1_select").val();
var category_2_id = $("#category_2_select").val();
// send value via GET to URL /<category_id>
var get_request = $.ajax({
type: 'POST',
url: '/category/' + category_1_id + '/',
});
// handle response
get_request.done(function(data){
// data
console.log(data)
// add values to list
var option_list = [["", "Select another category"]].concat(data);
$("#employee_select").empty();
for (var i = 0; i < option_list.length; i++) {
$("#employee_select").append(
$("<option></option>").attr("value", option_list[i][0]).text(option_list[i][1]));
}
// show model list
$("#employee_select").show();
});
});
$("#employee_select").change(function() {
// grab value
var category_1_id = $("#category_1_select").val();
var category_2_id = $("#category_2_select").val();
// send value via GET to URL /<category_id>
var get_request = $.ajax({
type: 'POST',
data: 'JSON.stringify([category_1_id, category_2_id])',
url: '/category/' + category_1_id + '/',
});
// handle response
get_request.done(function(data){
// data
console.log(data)
// add values to list
var option_list = [["", "Select another category"]].concat(data);
$("#category_3_select").empty();
for (var i = 0; i < option_list.length; i++) {
$("#category_3_select").append(
$("<option></option>").attr("value", option_list[i][0]).text(option_list[i][1]));
}
// show model list
$("#category_3_select").show();
});
});
【问题讨论】:
标签: javascript jquery python ajax flask