Django Haystack 自动完成 jquery 格式化

Django Haystack autocomplete jquery formatting

我对数据的格式有点困惑,我尝试了文档,JQuery 和 Haystack 都没有运气。

我已经设置了自动完成,当我输入时:

autocomplete/?search=foo

结果是:

{"results": ["foo1", "foo2", "foo3", "foo4", "foo5"]}

当我尝试检索它并将其用作 JQuery 自动完成的来源时,如下所示:

$('#autocomplete').autocomplete({ 
    source: function (request, response) { 
        $.getJSON("/autocomplete/?search=" + request.term, function (data) { 
            response(data); 
        }); 
    } 
});

没有显示结果。

如果我像这样创建一个变量:

x = ["foo1", "foo2", "foo3", "foo4", "foo5"];

然后这样称呼它:

$("#autocomplete").autocomplete({
    source: x,
});

它工作得很好。

明确一点,我理解的results来自Haystack是变量名,就像x一样。问题是,我似乎无法让它与 JQuery 一起工作。我在 SO 中查看了很多问题,但找不到解决方案。

寻找方向。

经过几个小时的检查调试器、确认数据已正确发送等。我设法找到了解决方案,而且非常简单。

我必须先将值存储在一个数组中,然后再将其返回给 JQuery 自动完成功能。

基本上:

$('#autocomplete').autocomplete({
 source: function (request, response) {
     $.getJSON("/autocomplete/?search=" + request.term,
     function (data) {
         var array = new Array();

         response($.map(data, function (value, key) {
             array = value;
             return array;
         }));
     });
 },
 minLength: 1,
});

我仍然不明白为什么,但我猜 Django returns 从外观上看是一本字典,而不是简单的数组或列表。 Dict 有键和值,所以我们需要获取值(在我的例子中)并将它放在一个数组中,以便它作为自动更正的正确输入。