You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:00:49