Laravel 5:jQuery Typeahead 在页面加载时给出错误状态 500(缺少参数)
Laravel 5: jQuery Typeahead gives error status 500 on page load (Missing argument)
其他一切正常,当我搜索 subreddit(类别)并将其提交到数据库时,没问题。
但是当我第一次加载 post/create
页面时,我在这条路线 http://localhost/reddit/public/data/subreddits
上得到 STATUS 500
考虑到它有效,我不确定我做错了什么。
路线
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);
}
Javascript 在 create.blade.php
<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()
你的第一条路线没有参数,但你调用了一个需要参数的函数。如果您删除该行,错误应该被删除。
Route::get('data/subreddits/{QUERY?}', 'PostsController@getSubreddits');
即使没有查询也会调用该函数。
正如@mimo 回答的那样,您需要将 query
设为可选参数。
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());
}
其他一切正常,当我搜索 subreddit(类别)并将其提交到数据库时,没问题。
但是当我第一次加载 post/create
页面时,我在这条路线 http://localhost/reddit/public/data/subreddits
STATUS 500
考虑到它有效,我不确定我做错了什么。
路线
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);
}
Javascript 在 create.blade.php
<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()
你的第一条路线没有参数,但你调用了一个需要参数的函数。如果您删除该行,错误应该被删除。
Route::get('data/subreddits/{QUERY?}', 'PostsController@getSubreddits');
即使没有查询也会调用该函数。
正如@mimo 回答的那样,您需要将 query
设为可选参数。
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());
}