【发布时间】:2018-10-26 09:53:03
【问题描述】:
我想使用 jQuery 和 Laravel 进行自动完成搜索输入。但是当用户在搜索输入中至少写了 2 个字母时,我得到了一个错误:
GET http://proj.test/autocomplete-search?term=ca 500 (Internal Server Error)
你知道问题出在哪里吗?我想根据用户在搜索表单中插入的字母显示会议。
搜索输入:
<div class="col col-md-6">
<h4 class="text-white text-center font-weight-bold">Search</h4>
<form class="main-search">
<input type="text" id="search" class="autocomplete dropdown-toggle" placeholder="Conference, Citiy, Category">
</form>
</div>
Laravel 路线:
Route::get('/autocomplete-search', 'AutocompleteController@search');
Laravel 自动完成控制器:
class AutocompleteController extends Controller
{
public function search(Request $request){
$search = $request->term;
$conferences = Conference::where('name', 'LIKE', '%'.$search.'%')->get();
$data= [];
foreach ($conferences as $key => $value){
$data[] = ['id'=>$value->id, 'value' => $value->id + " " + $value->name];
}
//dd($data);
return response($data);
}
}
jquery:
$("#search").autocomplete({
source: "{{ URL::to('autocomplete-search') }}",
minLength: 2,
select:function(key, value)
{
console.log(value);
}
});
编辑:在“网络”选项卡中,错误显示为:
{消息:“遇到非数字值”,异常: “错误异常”,…}
并指向这一行:
{function: "search", class: "App\Http\Controllers\AutocompleteController", type: "->"}". 在 "$data[] = ['id'=>$value->id, '值' => $value->id + " " + $value->name];
【问题讨论】:
-
500 响应意味着它是服务器端错误,即服务器代码由于某种原因崩溃。它不会向客户端透露更多详细信息,以防它无意中泄露了攻击者可以利用的某些内容(例如数据库详细信息或其他内容)。所以你必须检查服务器日志找出真正的错误,然后更容易知道如何修复它。
-
您的输入字段没有名称,因此 PHP 不知道您对
$request->term的含义。这可能是错误。 -
@Loek 查看问题开始时报告的 URL - 它似乎很高兴地在查询字符串上发送“term”参数。
-
"同样的错误"....你还没有发现错误!您所拥有的只是通用的 500 响应。正如我所说,我并没有声称找到了修复程序。您需要在服务器日志中找到真正的错误消息。
-
@ADyson 啊,是的,错过了!然后确实是检查 Laravel 和/或服务器日志的问题,看看它们是否有助于查明问题。