Автозаполнение JQuery со значениями базы данных не работает (Laravel 5)

Цель: Показать предложения в текстовом поле формы на основе данных из базы данных

<script>
$(function() {
$( "#activitynamebox" ).autocomplete({
source: '{{URL('getactivitydata')}}',
minlength: 1, //search after 1 character
select:function(event,ui){
$('#response').val(ui.item.value);
}

});
});
</script>

Эта проблема

код 1: работает как положено

public function suggestion() {

$return_array = array('1' => 'Example1',
'2' => 'Example2');

echo json_encode($return_array);

}

код 2: со значениями из базы данных, не работает:

public function suggestion() {

$term = 'programming';
$array = DB::table('activities')
->where('type', '=', 'Work')
->take(5)
->get();


foreach($array as $element) {
$return_array[$element->id] = $element->name;
}

echo json_encode($return_array);

}

Ошибка: внутренняя ошибка сервера 500

Я решил вывести $ return_array из кода 2 в отдельный контроллер, и результат был следующим:

{'1': 'Example1', '2': 'Example2' }

Это то же самое (я думаю), что работает в коде 1.

Почему код 1 работает, а код 2 — нет? Какая разница? заранее спасибо

0

Решение

Ну, если вы не опубликовали весь свой код, во втором примере есть несколько ошибок.

Прежде всего, что $return_array а где ты это взял?
Вы делаете это $return_array[$element->id] = $element->name; если вы не заявили $return_array где-то это будет пустая переменная, и вы не можете рассматривать пустую переменную как массив.

Во-вторых, ваш вывод не совпадает, ваш вывод — это один объект javascript, а вам нужен массив объектов.
Итак, ваш первый пример выводит это:

[
{'1': 'Example1'},
{'2': 'Example2'}
]

И в вашем втором примере вы выводите это:

{
'1': 'Example1',
'2': 'Example2'
}

Один единственный объект.

Поэтому, не зная, есть ли у вас какие-либо ошибки, кроме тех, которые видны, именно так должна выглядеть ваша функция предложения

public function suggestion() {

$term = 'programmer';
$array = DB::table('activities')
->where('type', '=', 'Work')
->take(5)
->get();

$return_array = [];
foreach($array as $element) {
//notice that we are pushing an associative array into the $return_array
$return_array[][$element->id] = $element->name;
}

echo json_encode($return_array);

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]