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
相关产品推荐
相关产品推荐

