2017-02-07 5 views
0

Я немного смущен форматированием данных, я пробовал документацию, как JQuery, так и Haystack, не повезло.Django Haystack autocomplete jquery форматирование

Я уже настройки автозаполнения, и когда я типа:

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, но не смог найти решение.

Ищет какое-то направление.

ответ

0

После нескольких часов проверки отладчика, подтверждающих правильность отправки данных и т. Д. И т. Д. Мне удалось найти решение, и было тихо.

Мне нужно было сохранить значения в массиве, прежде чем возвращать его в функцию автозаполнения 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 возвращает словарь, судя по ней, а не простого массива или списка. У Dict есть ключ и значение, поэтому нам нужно получить значение (в моем случае) и поместить его в массив, чтобы он работал как правильный ввод для автозамены.