2017-03-09 41 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