【问题标题】:JQuery autocomplete with database values not working (Laravel 5)数据库值不起作用的 JQuery 自动完成(Laravel 5)
【发布时间】:2015-07-23 23:40:50
【问题描述】:

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

<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 无效?有什么不同?提前致谢

【问题讨论】:

  • 在 foreach 之前,尝试:$return_array = [];
  • 另外,您可以使用 where 中间没有 '=' 运算符。
  • @rufin 感谢您的建议,但不幸的是结果是一样的
  • 使用 try { .. your code .. } catch (\Exception $e) { echo $e->getMessage() } 查看错误。

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


【解决方案1】:

除非您没有发布所有代码,否则您的第二个示例有几个错误。

首先,$return_array 是什么,你从哪里得到的? 你正在这样做$return_array[$element-&gt;id] = $element-&gt;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);

}

【讨论】:

  • 关于 $return_array 声明我已经修复了它(有人在我的问题中评论过),但问题是当我需要一个对象数组时有一个 javascript 对象。感谢您花时间回答,您的解决方案确实有效。我赞成并接受了你的回答,继续努力:)
猜你喜欢
  • 2017-05-15
  • 1970-01-01
  • 2017-02-26
  • 2012-11-02
  • 1970-01-01
  • 2015-06-08
  • 2014-04-28
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多