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

jQuery Select2加载JSON数据报slice未定义错误如何解决

问题根因
  • 结果集取值路径错误:processResults回调内使用data.items获取选项列表,但后端返回的JSON数据顶层仅存在results字段,无items字段,最终传入Select2组件的结果集为undefined,组件内部对该值调用数组方法slice时就会触发你看到的类型错误。
  • 配置项位置错误:dataType: 'json'是jQuery AJAX的专属配置,必须放在ajax配置对象内部才会生效。当前写法将该参数放在Select2初始化的根配置层级,jQuery无法自动将后端返回的JSON字符串解析为JavaScript对象,会进一步加剧数据解析异常。
修复方案

前端初始化代码修正

调整配置位置与取值路径,修正后代码如下:

$('#task_dname').select2({
  placeholder: 'Select an item',
  // tags: true,
  // cache: true,
  delay: 250,
  maximumInputLength: 20,
  minimumInputLength: 2,
  ajax: {
    type: 'post',
    url: 'query_list_tasks.php',
    dataType: 'json', // 移入ajax配置内部
    data: function (params) {
      return {
        searching: params.term,
        query: 'task_list'
      };
    },
    processResults: function (data) {
      console.log(data);
      // 匹配后端返回的字段名,从data.results取数
      return {
        results: data.results
      };
    }
  }
});

后端代码优化(可选)

手动拼接JSON字符串容易出现格式转义错误,建议直接通过PHP数组构造返回结构,由json_encode函数统一处理格式:

$response = [];
while ($row = $result->fetch_assoc()) {
  $response[] = [
    "id" => $row['id'],
    "text" => $row['text']
  ];
}

// 直接输出标准结构即可,无需手动拼接JSON字符串
echo json_encode([
  "results" => $response
]);

修改完成后清空浏览器缓存重试,下拉选项即可正常渲染,slice类型错误会直接消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:33:30