Flask中服务器端怎样接受ajax发送的json?

js代码如下:

<script type=text/javascript>
    function ajaxForm(){
        $.ajax({
             type: 'post',
             //contentType: "application/json; charset=UTF-8",
             url: $SCRIPT_ROOT,
             dataType: 'json',
              data:{
                  'n1': $('input[name=n1]').val(),
                  'n2': $('input[name=n2]').val(),
                  'n3': $('input[name=n3]').val(),
              },
            error: function(xhr, err){
            alert('请求失败,原因可能是:' + err + '!')
        },
        success: function(data, textStatus){
        $('#max').text(data.max);
        $('#min').text(data.min);
        }
        });
      return false
    }
</script>

服务端只能用request.form.get()得到数据,request.get_json()却是None,改变contentType也是一样的,这是怎么回事呢?
我想应该是URL的问题$SCRIPT_ROOT = {{ request.script_root|tojson|safe }}是空的
怎样设置URL才能让进入服务view函数内呢?

阅读 16.5k
4 个回答

虽然已经过了两年了,题主肯定不需要了,但是还是为将来可能要踩这个坑的同学答一下
你的ajax 采用“post”方法,但是没有告诉后端传递参数contentType: 'application/json; charset=UTF-8',
这样就告诉后端才用的是json格式,你的datatype其实是希望后端返回的数据格式
但是这样设置后也只有request.get_data有数据(),request.get_json()还是得不到数据,这时候需要设置data:JSON.stringify()也就是楼主找到的方法。

pythonrequest.form['n1']
request.form.get('n1')
request.form.get('n1','default')

在stack overflow找到了一个临时解决方法,修改如下:

data:{
                  'n1': $('input[name=n1]').val(),
                  'n2': $('input[name=n2]').val(),
                  'n3': $('input[name=n3]').val(),
              },

修改为:

data:JSON.stringify({
                  'n1': $('input[name=n1]').val(),
                  'n2': $('input[name=n2]').val(),
                  'n3': $('input[name=n3]').val(),
              }),
新手上路,请多包涵

request.get_json() 获取的json格式不对,请注意 "和'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏