2013-10-24 71 views
1

以下是我的用於處理Ajax/jQuery請求的Django代碼。 'q'參數的Django過濾方法不起作用。這可能是因爲Ajax請求採用JSON格式。有人可以建議我去哪裏錯了嗎?無法在Django後端處理Ajax/jQuery請求

Views.py

def get_names(request): 
    q = request.GET.get('term', '') 
    names = Names.objects.filter(names__startswith=q)[:10] 
    results = [] 
    if names.count > 0: 
     for name in names: 
     name_json = {} 
     name_json['id'] = name.id 
     name_json['label'] = name.name 
     name_json['value'] = name.name 
     results.append(name_json) 
     data = json.dumps(results) 
    else: 
     data = 'fail' 

    mimetype = 'application/json' 
    return HttpResponse(data, mimetype) 

下面是我的jQuery代碼

$(document).on("pageinit", "#myPage", function() { 
$("#autocomplete").on("listviewbeforefilter", function (e, data) { 
    var $ul = $(this), 
     $input = $(data.input), 
     value = $input.val(), 
     html = ""; 
    $ul.html(""); 
    if (value && value.length > 2) { 
     $ul.html("<li><div class='ui-loader'><span class='ui-icon ui-icon-loading'></span></div></li>"); 
     $ul.listview("refresh"); 
     $.ajax({ 
      url: "/get_names/", 
      dataType: "json", 
      crossDomain: true, 
      data: { 
       term: $input.val() 
      } 
     }) 
     .then(function (response) { 
      $.each(response, function (i, val) { 
       html += "<li>" + val + "</li>"; 
      }); 
      $ul.html(html); 
      $ul.listview("refresh"); 
      $ul.trigger("updatelayout"); 
     }); 
    } 
});}); 
+0

爲什麼'crossDomain:true,'? –

回答

0

按照jquery docs,的dataType影響響應,沒有要求,所以這不應該是你的問題。嘗試在視圖的開頭添加print request.GET - 這應該告訴您術語參數是否實際上正在發送。我唯一的想法是,您的$輸入在某個時候正在失去價值 - 可能由$ul.listview("refresh");觸發? - 你或許應該改變

data: { 
    term: $input.val() 
} 

data: { 
    term: value 
} 

,因爲你已經檢索到的值進一步上漲。

+0

感謝您的回覆。當我嘗試打印request.GET時,我得到''。我想在我的django方法中將'john'中的查詢分配給'q',以便相應地過濾我的數據庫。另外,將術語從'$ input.val()'改爲'value'也無濟於事。 – kurrodu

+0

奇怪的是,你發送一個'term'變量,但是'q'變量到達服務器。所以你的django變量'q'將是空字符串。 –