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

Laravel8 Boilerplate+Bootstrap下Select2 Ajax调用报reading 'length'错误

问题修复方案

报错核心原因是Select2获取到的选项数组为undefined,尝试读取其length属性时触发错误,代码共存在5处可修复问题:

  • 移除重复的Select2初始化逻辑
    你使用的<x-boilerplate::select2>组件如果配置了:ajax属性,会自动初始化Select2实例,无需再在自定义JS中重复调用$( "#frm_Daily_Headings" ).select2(),否则会导致参数冲突。如果要使用自定义Ajax配置,先删除组件上的:ajax="route('boilerplate.getHeadings')"属性。
  • 修复JS中processResults函数的变量引用错误
    原代码中processResults接收的参数是response,但内部错误引用了未定义的results、data变量,修正后的代码如下:
processResults: function (response) {
    return {
        results: response.results
    };
}
  • 修正后端返回的JSON格式
    原控制器中$returnThis=['results',$headings]会返回索引数组,不符合Select2要求的关联对象格式,调整为:
// 把$returnThis赋值移到foreach循环外
if (count($data) > 0)
{
    foreach ($data as $heading)
    {
        $headings[] = array(
            "id" => $heading->id,
            "text" => $heading->heading,
        );
    }
}
$returnThis = ['results' => $headings];
return response()->json($returnThis);
  • 统一前后端传参的参数名
    前端AJAX请求中传递的搜索关键词参数是q,但后端读取的是query,需要统一:
    要么前端data里修改为query: params.term,要么后端修改为if (!empty($input['q']))。
  • 移除不必要的空返回判断
    原JS中if(params.term === undefined){return}会导致首次点击下拉框无搜索词时不发起请求,触发空数据错误,可删除该判断,无搜索词时正常返回全量选项即可。

内容的提问来源于stack exchange,提问作者raul prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:04