2016-08-04 152 views
0

我搜索的術語「雙」應該返回一個用戶名與初始「雙...」 但沒有任何顯示,沒有下拉這是我的代碼。Django沒有響應ajax自動完成

search.html

<html> 
<div class="ui-widget"> 
    <label for="search4">search4: </label> 
    <input id="search4"> 
</div> 

<script type="text/javascript"> 
$(function(){ 
    $("#search4").autocomplete({ 
    source: '/rating/searchresult/', 
    minLength: 2, 
    }); 
}); 
</script> 
</html> 

url.py

url(r'^searchresult/', 'rating.views.search_images'), 

views.py

def search_images(request): 
    if request.is_ajax(): 
     s = request.GET.get("term", '') 
     search_result = UploadImage.objects.filter(user__username__icontains = s)[:20] 
     search = [] 
     for result in search_result: 
      json_d = {} 
      json_d['id'] = result.id 
      json_d['name'] = result 
      json_d['value'] = result 
      search.append(json_d) 
     data = m_json.dumps(search) 
    else: 
     data = 'error' 
    mimetype = 'application/json' 
    return HttpResponse(data, mimetype) 

如果我搜索一個值阿賈克斯而術語URL中

[04/Aug/2016 08:48:46] "GET /rating/searchresult/?term=bi HTTP/1.1" 200 2661 

經過多年平均值響應並返回任何在下拉菜單中,我能不明白的地方是阿賈克斯或者Django的 Also my content type is text html see here

+0

嘗試調試它。您可以嘗試使用'print'和'alert'語句快速檢查數據丟失的位置。 –

+0

我試過'打印數據'和'打印s',沒有顯示任何內容 –

+0

然後在Django中如果不打印數據,那麼Ajax Resopnse明顯會出現抖動。 –

回答

0

好了,所以在技術上你正在做這一切錯誤的問題。

autocompletesource屬性需要一組字符串或數據,您希望在輸入字段中爲用戶提供自動完成選項。

現在你正在嘗試做的是簡單地給對應於你的views.py特定視圖類或方法的urlsourceautocomplete,而實際上你需要做的是通過敲擊,要得到一個ajax響應url,然後您將從該網址對應的類/方法中獲得所需的響應。

現在你會養活這個responseautocomplete

源看到這裏怎麼autocompletesource作品 - >http://api.jqueryui.com/autocomplete/#option-source

而且ajax的官方文檔 - 的>http://api.jquery.com/jquery.ajax/

文檔$.get() - >https://api.jquery.com/jquery.get/

So yo烏爾JavaScript文件看起來像這樣:

$(document).on('ready', function(){ 
     populateSearchFieldList(); 
     // all other code according to your needs 

}); 

function populateSearchFieldList() { 

    var url = "/rating/searchresult/"; 
    $.get(url, function(response) { 

      // console.log("Success..!!"); 
      console.log(response); 

      // now in views.py, you've returned a list in which every 
      // object has an id, name and value but you 
      // want only the names in your autocomplete. So for that, first 
      // you'll have to create a list of just the names and then feed 
      // that list to the source of autocomplete. Like this 

      var searchFieldOptions = []; 
      var i = 0; 

      $.each(response,function(){ 
       searchFieldOptions.push(response[i].name); 
       i++; 
      }); 

      // and now make the source of autocomplete as 
      // searchFieldOptions like this 

      $(function(){ 
       $("#search4").autocomplete({ 
        source: searchFieldOptions, 
        minLength: 2, 
       }); 
      });    

     }); 
} 

現在,如果它成功的工作,那麼你就必須在你的success功能收到response所需的數據。現在,您可以使用此response作爲的source,如果它只是一個列表或可以根據您的要求進一步修改此response並形成所需內容的array

+0

答覆,但在哪裏把自動完成功能。在你的代碼中,對不起,我不知道JS,我juz跟着給定的博客 –

+0

我會編輯我的答案,告訴你在哪裏可以把'autocomplete'功能。 –

+0

@SajnaAbubacker,檢查更新的答案。 –