2015-07-23 2 views
0

Цель: Показать предложения в текстовом поле одной из форм на основе данных из базы данных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 в отдельном контроллере и Ouput был следующее:

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

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

Почему код 1 работа в то время как код 2 d oesn't? Какая разница? Заранее спасибо

+0

перед Еогеаспом, попробуйте: $ return_array = []; – ruifn

+0

также вы можете использовать, где без оператора '=' в середине. – ruifn

+0

@rufin Спасибо за ваше предложение, но, к сожалению, результат был тот же –

ответ

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); 

} 
+0

Об объявлении $ return_array я уже исправил его (кто-то прокомментировал это в моем вопросе), но проблема была в том, что вы сказали, что у меня есть объект javascript, когда мне нужен массив объектов. Спасибо, что нашли время ответить, ваше решение действительно сработало. Я поддержал и принял ваш ответ, продолжайте хорошую работу :) –

Смежные вопросы