【问题标题】:Unable to send data of multiple queries to ajax call in django无法将多个查询的数据发送到 Django 中的 ajax 调用
【发布时间】:2019-03-26 22:19:43
【问题描述】:

我想传递两个名为mydatayourdata 的数据查询结果,问题是当我只发送mydatayourdata 时它工作正常,但是当我发送上下文变量时它不工作大家好,我是django 的新手,所以任何形式的帮助都将不胜感激。

@csrf_exempt
def snippetrequests(request):
    import json
    mydata=changerequest.objects.filter(owner_id=request.user.id)
    yourdata=changerequest.objects.filter(user_id=request.user.id)
    mydata=serializers.serialize('json',mydata)
    yourdata=serializers.serialize('json',yourdata)
    if request.method == 'GET':
       context = {
          'mydata':mydata ,
          'yourdata':yourdata
               }
    return HttpResponse(context, content_type="application/json" ) 

我正在像这样使用 AJAX 从中获取数据

$.ajax({
    url: '/snippetrequests/',
    type: 'GET',
    data={},
    success: function(data) {
        // alert(data);
         alert(data)
        console.log(data)
        var div1 = document.getElementById('snippet');   
    },
    failure: function(data) { 
        alert('Got an error dude');
    }
});  

【问题讨论】:

    标签: javascript python jquery django django-views


    【解决方案1】:

    您已经序列化了模型数据,但没有直接响应;它仍然是字典格式。因此,HTTPResponse 可能只是返回一个有点像 JSON 的字符串,而不是实际的 JSON。

    json.dumps 用作return 语句的一部分。

    return HttpResponse(json.dumps(context), content_type="application/json")
    

    或者更好的是,如果您使用的是 Django 1.7+,请使用 JsonResponse 对象:

    from django.http import JsonResponse
    
    . . .
    
    return JsonResponse(context)
    

    【讨论】:

    • 它将我的两个查询对象转换为字符串:(
    【解决方案2】:

    你可以在json.dumps()的帮助下返回上下文,比如

    return HttpResponse(json.dumps(context), content_type="application/json" )
    

    json.dumps 基本上将您的上下文字典转换为字符串。

    如果您看到 HttpResponse 类代码,它基本上将字符串作为内容,content=b'' 作为默认参数,其中 b 表示字节,然后将您的内容转换为字节字符串并与 b'' 连接并设置.

    因此您需要使用 json.dumps(content)。

    或者您可以尝试扩展 HttpResponse 类的 JsonResponse,默认 Content-Type 标头为 application/json

    from django.http import JsonResponse
    
    return JsonResponse(context)
    

    【讨论】:

    • 它将我的两个查询对象转换为字符串:(
    • 您的查询对象将被转换为字符串,序列化用于将 json 对象中的数据转换为字符串以进行响应。
    • 谢谢。我在 javascript 端做了 json 解析然后现在工作正常
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2016-07-22
    • 2021-08-27
    • 2017-06-23
    相关资源
    最近更新 更多