在 Flask 中有一个有点复杂的端点,当前部署到在 apache 下运行应用程序的服务器:
@app.route('/whatever', methods=['GET', 'POST'])
def somefunct:
if request.method == 'POST':
templist = request.data.split("=", 1)
<< do some stuff with templist >>
<< do some other stuff >>
return render_template('sometemplate.html', **<<variable dict>>)
sometemplate.html 有点棘手,它包含一个从变量字典中提取数据的表,还提供了一个允许用户与之交互的下拉列表,利用 Jinja 变量:
{% for item in << variable in dict >> %}
...
<td>
<form name="category-form" id="category-form-{{ item }}" action="/whatever">
<select name="{{ item }}" id="{{ item }}">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</form>
</td>
然后我有一些 javascript 来触发正确的 POST 操作(已加载 jQuery):
$(document).ready(function() {
{% for item in << variable in dict >> %}
var form{{ item }} = $('category-form-{{ item }}');
form{{ item }}.find('#{{ item }}').change(function(){
$.ajax({
type: "POST",
url: form{{ item }}.attr('action'),
data: form{{ item }}.serialize(),
success: function(response){
console.log("calling {{item}}")
}
});
});
{% endfor %}
});
我已经完成了测试,可以看到每当item
调用 's 表单时,它都会成功地将POST
操作发送到正确的端点。
我还可以看到它正在序列化正确的对象,即319832=2
.
出于某种原因,序列化对象没有正确传递到端点——templist
在 Flask 中是一个空对象。
猜测这与 ajax 调用和request
端点接收之间的握手有关。任何想法为什么端点可能没有在 apache 上下文中接收到这个请求,而上面的方法适用于我的localhost
?