2013-10-24 157 views
3

当使用jQuery自动完成时,我得到[object object]在自动完成元素下面呈现,而不是数据库中的值(错误截图为click here)。有人可以建议我去哪里错了。Jquery AutoComplete返回[对象对象]

这里是我的jQuery Mobile的代码

$(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: { 
        q: $input.val() 
       } 
      }) 
      .then(function (response) { 
       $.each(response, function (i, val) { 
        html += "<li>" + val + "</li>"; 
       }); 
       $ul.html(html); 
       $ul.listview("refresh"); 
       $ul.trigger("updatelayout"); 
      }); 
     } 
    }); 
}); 

这里是我的html代码

<div data-role="page" id="myPage"> 

    <div data-role="content"> 

    <ul id="autocomplete" data-role="listview" data-inset="true" data-filter="true" data-filter-placeholder="Search House Id..." data-filter-theme="d"></ul> 
    </div><!-- /content --> 
</div> 

这里是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) 

回答

2

我的Django代码,我不熟悉Django,但如果我正确地遵循我认为你需要改变以下内容:

$.each(response, function (i, val) { 
    html += "<li>" + val.value + "</li>"; 
}); 

val是一个对象。

还只是一个调试的提示,我会为了在$.each();前添加console.log(response);弄清楚VAL将是,如果我是你是在碰到的情况。

+0

谢谢,它的工作原理。 – kurrodu

2

您需要钻到JSON的价值,就像这样:

val.id 

val.label 

val.value 

我假设你想val.label是为<li>文本,所以你的代码应该是这样的:

$.each(response, function (i, val) { 
    html += "<li>" + val.value + "</li>"; 
}); 
+0

谢谢你的解释! – kurrodu

+0

@kurrodu - 没问题,如果你觉得它有帮助,可以随意投我的答案。 :-) –

+0

意识到我需要15点声望才能投票.. – kurrodu