这是我的视图功能
@app.route('/share', methods=['GET', 'POST']) def share(): form = ShareForm(request.form) if request.method == 'POST': title = form.title.data body = form.body.data share_id = form.share_id.data print 'form data %s %s %s' % (title, body, share_id) if not share_id: share = Shares(title, body, 'PUBLISHED', current_user.id) db.session.add(share) db.session.commit() form.share_id.data = share.id return jsonify({'status': 204, 'body': {'status': True}}) else: return render_template('share.html', form=form)
Ajax发布请求的代码
<script> $(function(){ $('#share').on('click', function(e){ e.preventDefault(); // preventing default click action $.ajax({ url: '/share', type: 'post', contentType: "application/json; charset=utf-8", data: $('#share-form').serialize(), success: function(){ console.log('success'); console.log( $('#share-form').serialize()); }, error: function(xhr, textStatus, errorThrown) { alert(xhr.responseText); console.log( $('#share-form').serialize()); }}); }) //return false; }); </script>
在视图中,当我尝试打印请求对象时,得到以下数据
print request.data 'title=adsl%3Blsaj%3Blj%3Bl&body=j%3Bas%3Bl%3Bl+&share_id='
但是如果我尝试去做
print request.form.get('title', 'None')
我得到“无”
有人可以告诉我如何解决这个问题吗?
您将内容类型设置为,application/json但正在发送application/x-www-form-urlencoded数据。
application/json
application/x-www-form-urlencoded
设置正确的内容类型:
$.ajax({ url: '/share', type: 'post', contentType: "application/x-www-form-urlencoded", data: $('#share-form').serialize(),
或更妙的是,通过contentType完全省略键将其保留为默认值。
contentType