2016-01-22 38 views
0

我對django和AJAX很新,並且試圖用下拉菜單中的數據填充HTML元素(暫時跨度)。從Django中選定的下拉值中填充html元素

我目前的做法是通過<option>元素中的id標記獲取該行的唯一ID,並將其與AJAX一起發佈到views.py,然後將該ID用作Django中的過濾器以獲取相應的行。但是,由於某種原因,每當我嘗試過濾查詢時都不會返回任何內容。每當我刪除過濾器,所有的值都被解析,讓我覺得我得到了錯誤的過濾器。我已經嘗試了許多不同的過濾器類型,但我似乎無法做到。

的HTML是:

<select id="drugSet"> 
{% for dose in dose_set %} 
<option id="{{ dose.pubmed_id }}">{{ dose.drug_name }}</option> 
{% endfor %} 
</select> 

<span id="drugName"></span>  
<a href="javascript:NeedDrugInformation()">Retrieve data</a> 

的JavaScript和Ajax是:

function NeedDrugInformation() { 
     var elementID = document.getElementById("drugSet"); 
     var drugID = String(elementID.options[elementID.selectedIndex].id); 

     $.ajax({ 
      type: "POST", 
      url: "drugsanddoses/", 
      dataType: "json", 
      async: true, 
      data: { csrfmiddlewaretoken: '{{ csrf_token }}', drugID: drugID }, 
      success : function(json) { 
      }, 
      error : function(xhr,errmsg,err) { 
      } 
     }); 

     $.ajax({ 
      type: "GET", 
      url: "drugsanddoses", 
      dataType: "json", 
      async: true, 
      data: { csrfmiddlewaretoken: '{{ csrf_token }}' }, 
      success: function (json) { 
       $('#drugName').html(json.drugInfo); 
       // $('.ajaxProgress').hide(); 
      } 
     }) 
    } 

Views.py:

def drugsanddoses(request): 

    drugID = request.POST.get('drugID') 

    drugInfo = RiskCalculator.objects.filter(pubmed_id='drugID').values('drug_name', 'l_dose', 'h_dose', 'risk', 'pubmed_id', 'updated')  
    response_data = {} 

    try: 
     response_data['drugInfo'] = str(drugInfo) 
    except: 
     response_data['result'] = 'No details found' 
     response_data['message'] = 'There is currently no information in the database for this drug.' 

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

正如我所說的,我很新的這。任何指針或方式,我可以做得更好,將不勝感激。

回答

0

首先,POST字段包含表單發佈值,而不是JSON。解析JSON有效載荷第一:

import json 
drugID = json.loads(request.body).get('drugID') 

其次,你正在使用的字符串'drugID'在你的過濾器,而不是在變量drugID值。請嘗試更改查詢行:

drugInfo = RiskCalculator.objects.filter(pubmed_id=drugID).values('drug_name', 'l_dose', 'h_dose', 'risk', 'pubmed_id', 'updated') 

你也應該使用JsonResponse從來沒有捕獲所有異常。

+0

我認爲這可能是問題,但是當我嘗試它時,它會返回一個空的[]數組... – GeeJay

+0

仔細查看我看到您沒有正確訪問JSON數據。據此編輯回覆。 –

+0

我已經實現了這些更改,但是我不確定如何正確使用JsonResponse。它是簡單的:'return JsonResponse(response_data,encoder = DjangoJSONEncoder,safe = False,json_dumps_params = None)' – GeeJay