Цель: Показать предложения в текстовом поле формы на основе данных из базы данных
<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 — нет? Какая разница? заранее спасибо
Ну, если вы не опубликовали весь свой код, во втором примере есть несколько ошибок.
Прежде всего, что $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);
}
Других решений пока нет …