JQuery自动完成,数据库值不起作用(Laravel 5)

时间:2015-07-23 23:40:51

标签: php database laravel laravel-5 jquery-autocomplete

目标:根据数据库中的数据在表单文本框中显示建议

<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

我决定在单独的控制器中回显代码2中的$ return_array,输出如下:

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

在代码1中硬编码的是(我认为)同样的事情。

为什么代码1工作而代码2没有?有什么区别?提前致谢

1 个答案:

答案 0 :(得分: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);

}