Laravel+jQuery自动补全搜索报500错误:遇到非数值值
解决Laravel+jQuery自动补全的500内部服务器错误
你遇到的500错误根源非常明确——PHP里字符串拼接不能用+,得用.!
看你控制器里触发错误的这行代码:
$data[] = ['id'=>$value->id, 'value' => $value->id + " " + $value->name];
PHP中+是数值加法运算符,不是字符串拼接符。你这里把数值类型的$value->id和字符串(空格、会议名称)用+连接,PHP会尝试把这些字符串转换成数值,而空格和会议名称显然不是有效数值,所以直接抛出了"A non-numeric value encountered"的错误。
修正后的控制器代码
把字符串拼接的+换成.就能解决问题,同时建议用response()->json()返回标准JSON响应,这样jQuery autocomplete解析起来更稳妥:
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 ]; } return response()->json($data); } }
额外优化小建议
- 可以给
$search加个简单校验,避免空查询的无效操作:if(empty($search)) { return response()->json([]); } - 你的jQuery代码本身没问题,但控制器改用
response()->json()后,能确保返回格式完全符合组件的预期。
附你的原始代码参考
搜索输入HTML
<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');
jQuery代码
$("#search").autocomplete({ source: "{{ URL::to('autocomplete-search') }}", minLength: 2, select:function(key, value) { console.log(value); } });
内容的提问来源于stack exchange,提问作者johnW
相关产品推荐
相关产品推荐

