php - 拉拉维尔 5 : jQuery Typeahead gives error status 500 on page load (Missing argument)

标签 php jquery laravel laravel-5 typeahead.js

其他一切正常,当我搜索 subreddit(类别)并将其提交到数据库时,没有问题。

但是当我第一次加载post/create时页面,我得到 STATUS 500在此路线上http://localhost/reddit/public/data/subreddits

考虑到它有效,我不确定我做错了什么。

路线

Route::get('data/subreddits', 'PostsController@getSubreddits');
Route::get('data/subreddits/{QUERY}', 'PostsController@getSubreddits');

PostsController.php

public function create()
{
    $subreddits = Subreddit::lists('name', 'id')->toArray();

    return view('post/create')->with('subreddits', $subreddits);
}

public function getSubreddits($query) {
        $results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%' . $query . '%')->get();
        return Response::json($results);
}

create.blade.php中的Javascript

<script type="text/javascript">
        $(document).ready(function() {
            var subreddits = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                prefetch: 'http://localhost/reddit/public/data/subreddits',
                remote: {
                    url: 'http://localhost/reddit/public/data/subreddits/%QUERY',
                    wildcard: '%QUERY'
                }
            });

            $('#remote .typeahead').typeahead(null, {
                name: 'name',
                display: 'name',
                source: subreddits
            });

            $('#remote .typeahead').bind('typeahead:select', function(ev, suggestion) {
                $('.subreddit_id').val(suggestion.id);
            });
        });
    </script>

错误

Missing argument 1 for App\Http\Controller\PostsController::getSubreddits()

最佳答案

正如 @mimo 所回答的那样,您需要将您的查询作为可选参数。

Route::get('data/subreddits/{query?}', 'PostsController@getSubreddits');

您还需要将默认值传递给 getSubreddits 中的 query 参数

public function getSubreddits($query = '') {
    $results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%' . $query . '%')->get();
    return Response::json($results);
}

此外,如果只有很少的结果,如果没有传递查询参数,您可以发送所有数据。

public function getSubreddits($query = '') {
    $q = Subreddit::select('id', 'name')
    if ($query) {
        $q->where('name', 'LIKE', '%' . $query . '%');
    }
    return Response::json($q->get());
}

关于php - 拉拉维尔 5 : jQuery Typeahead gives error status 500 on page load (Missing argument),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32938609/

相关文章:

php - 检测 .htaccess 中对 php_value/php_flag 的支持以抑制错误 - PHP CGI 模式 - mod_php

javascript - 已弃用的 "target"属性的任何正式替代方案?

javascript - 如何制作标签菜单

php - Cloudflare 上的 Laravel 在表单错误上产生 502 Bad Gateway

mysql - 如何使用 laravel eloquent 连接表?

php - 如何在Eloquent查询中根据相关模型数据添加条件?

php - cURL 从文件中发布数据

php - 按月分页 Symfony/Paginator

javascript - 如何根据单击按钮折叠和展开 Kendo UI treeView 中的所有树节点?

javascript - textarea文本未插入到php数据库mysql