2017-03-09 56 views
0

我有2个来自数据库的查询结果,并尝试像这样以json格式返回它。Django - HttpResponse 2 JSON格式的查询结果

gt_buffer = ev_ground_truth.objects.filter(alg=_alg, exp=_exp,nFrame=_nframe) 
    dt_buffer = ev_detection.objects.filter(alg = _alg, exp=_exp, nFrame=_nframe) 
    json_gt_bb = serializers.serialize('json', gt_buffer) 
    json_dt_bb = serializers.serialize('json', dt_buffer) 
    dict_bb_buffer = {'gt': json_gt_bb, 'dt': json_dt_bb} 
    json_bb_buffer = json.dumps(dict_bb_buffer, ensure_ascii=False) 

    return HttpResponse(dict_bb_buffer, content_type = "application/json") 

,并在前端,

$.ajax({ 
     url: '/results/get_nframebbs', 
     data: { 
     'exp':_exp, 
     'alg':_alg, 
     'nframe':data[i]['fields'].nFrame 
     }, 
     dataType: 'json', 
     success: function (data) { 
      alert(data.length) 
     } 
    }); 

但警报不会被调用。但是,如果我只是序列化1查询结果并返回警报被称为成功与弹出。

 gt_buffer = ev_ground_truth.objects.filter(alg=_alg, exp=_exp,nFrame=_nframe) 

     json_gt_bb = serializers.serialize('json', gt_buffer) 



     return HttpResponse(json_gt_bb, content_type = "application/json") 

我做错了什么?

+0

您使用的DRF(?Django的REST框架) – Beomi

+0

我不知道那是什么。我不这么认为。 – pwan

+0

@Beomi你有什么想法吗? – pwan

回答

0

很简单。只需返回2个查询结果作为字符串并在前端解析即可。

gt_buffer = ev_ground_truth.objects.filter(alg=_alg, exp=_exp,nFrame=_nframe) 
    dt_buffer = ev_detection.objects.filter(alg = _alg, exp=_exp, nFrame=_nframe) 
    json_gt_bb = serializers.serialize('json', gt_buffer) 
    json_dt_bb = serializers.serialize('json', dt_buffer) 
    dict_bb_buffer = {'gt': json_gt_bb, 'dt': json_dt_bb} 


    return JsonResponse(dict_bb_buffer, status = 201) 

,并在前端:

数据类型:? 'JSON',

 success: function (data) { 

       gt = JSON.parse(data.gt.substring(1,data.gt.length-1)); 
       dt = JSON.parse(data.dt.substring(1,data.dt.length-1)); 
      } 
0

您的回复作为您的成功函数的参数,而不是直接的json数据。你可以像这样访问你的数据:

success: function (response) { 
     var gt = response.responseJSON.gt; 
} 
+0

这不起作用。它永远不会进入成功的功能。 – pwan