【问题标题】:how to parse json data with ajax POST in Django view如何在 Django 视图中使用 ajax POST 解析 json 数据
【发布时间】:2015-11-25 02:42:42
【问题描述】:

我正在尝试在 django 视图中解析 json 数据。但是我遇到了问题。

我正在使用下面的代码 sn-p。

$(document).ready(function(){
    $("#mySelect").change(function(){
        selected = $("#mySelect option:selected").text()
        $.ajax({
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            url: '/test/jsontest/',
            data: {
                   'fruit': selected,
                  },
            success: function(result) {
                    document.write(result)
                    }
    });
  });
});

当客户端用户更改值时,ajax 代码发送 json 数据。 但是服务器端视图以“fruit=apple”的形式接收数据。 我认为这不是 json 数据格式。所以,我不知道如何解析数据。

我尝试解析如下,但调用 json.dumps(data) 后出现 500 Internal server error

class JsonRead(View):
    template_name = 'MW_Etc/jsonpost.html'
    def get(self,request):
        return render(request, self.template_name)

    def post(self,request):
        data = request.body
        logger.debug('json data received(%s)' % data)
        return HttpResponse(json.dumps(data), content_type='application/json')

【问题讨论】:

    标签: jquery python ajax json django


    【解决方案1】:

    像这样发布 JSON 字符串。

    data: {'data': JSON.stringify({'fruit': selected})}

    并收到喜欢

    data = json.loads(request.POST.get('data', ''))

    【讨论】:

    • 如果他去掉单引号如:data: {fruit: selected},他会成功做到fruit = json.loads(request.POST.get('fruit'))
    【解决方案2】:

    您需要将数据发布为 JSON 字符串而不是 JavaScript 对象。

    data: JSON.stringify({'fruit': selected})
    

    应该这样做。另请注意,您需要 json.loads Django 中的数据才能实际使用它。

    【讨论】:

    • 正如你提到的,我添加了 jsondata=json.loads(request.body)。但我收到 500 错误。
    • 您是否也编辑了 JavaScript 客户端?尝试记录错误以查看问题所在 (try: ... except Exception, e: logger.exception(e))。
    • “JSON 对象必须是 str,而不是 'bytes'”导致的异常,我该如何解决?
    • 我自己从未遇到过这种情况,但也许这会有所帮助:stackoverflow.com/questions/25968752/…
    • json.loads(request.body.decode('utf-8')) 为我工作!!
    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2015-02-03
    相关资源
    最近更新 更多