Apache の下でアプリケーションを実行しているサーバーに現在デプロイされている Flask に、やや複雑なエンドポイントがあります。
@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>
そして、正しい POST アクションをトリガーする JavaScript があります (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
正常に送信されていることがわかります。POST
また、正しいオブジェクトをシリアライズしていることもわかります319832=2
。
何らかの理由で、シリアル化されたオブジェクトがエンドポイントに正しく渡されませんtemplist
。Flask では空のオブジェクトです。
request
これは、ajax 呼び出しとエンドポイントによる の受信との間のハンドシェイクと関係があると推測されます。上記が私のlocalhost
.