javascript - 怎么从flask中接受从jquery发送的json数据?
问题描述
flask app中从前端接受json的数据,但是flask的request中并没有接受成功,其中没有数据,换了很多函数都行不通。js代码
$(function(){ $('#test').click(function(){$.ajax({ url: '{{ url_for(’main.getjson’) }}', type: 'POST', data: JSON.stringify({'n1': 'test1','n2': 'test2','n3': 'test3' }), dataType: 'json', success: function(data){var a = data.uservar texthtml = '<p>' + a + '</p>'$('#result').html(texthtml) }}); });});
flask中的视图函数:
@main.route(’/getjson’, methods = [’GET’, ’POST’])def getjson(): a = request.json if a:return jsonify(user = 'Right') return jsonify(user = 'error')
仅仅判断request.json是不是存在,但是返回来的总是“error”的字符串。request.json中总是null。后来换了request.args.get(),同样行不通。到底是哪里出错了,真心求教。
问题解答
回答1:找到答案了,仅仅是在jquery部分出了问题。$.ajax的参数contentType,默认是 'application/x-www-form-urlencoded',需要把这个参数设置成application/json。
$.ajax({url: '{{ url_for(’main.getjson’) }}',type: 'POST',data: JSON.stringify({ 'n1': 'test1', 'n2': 'test2', 'n3': 'test3'}),contentType: 'application/json',dataType: 'json',success: function(data){ var a = data.user var texthtml = '<p>' + a + '</p>' $('#result').html(texthtml)} });
参考:https://flask.readthedocs.io/...http://stackoverflow.com/ques...
回答2:jquery的ajax发送data的时候不需要JSON.stringify.他会自动处理.
回答3:根据你的描述,你的已经把问题找到了,为什么不继续尝试一下,或者看下文档
@app.route(’/api’, methods=[’POST’])def api(): a = request.json b = request.get_data() c = request.values print a print b print c if a:return ’ok’ return ’error one’
输出结果
None{'id':1}CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([(’{'id':1}’, u’’)])])
request.json很奇葩,确实没数据,但是它是可以用的,你这里没用的原因如下:
json If the mimetype is application/json this will contain the parsedJSON data. Otherwise this will be None. The get_json() method shouldbe used instead.但是我使用get_json(),它无情的报错说AttributeError: ’Request’ object has no attribute ’get_json’
所以我只是成功使用过一次request.json,后来再也没有成功过,因为它很神奇,如果可以找一个替代request.json吧。
相关文章:
1. Android明明可以直接分享,为什么还要用微信开放平台、微博开放平台的sdk?2. javascript - 单页面应用怎么监听ios微信返回键?3. angular.js - 在ionic下,利用javascript导入百度地图,pc端可以显示,移动端无法显示4. css3 - 求教个问题,关于响应式布局,跟ipad有关,媒体查询失效?5. javascript - 如何保证几个ajax提交成功;6. nginx - 关于javaweb项目瘦身问题,前期开发后,发现项目占用存贮空间太大,差不多1.2个G,怎么实现瘦身,动态页面主要是jsp。7. css - 浏览器缩放分辨率为什么布局会变8. angular.js - 百度支持_escaped_fragment_吗?9. vue.js - vue apache 代理设置10. 我在centos容器里安装docker,也就是在容器里安装容器,报错了?
