Php 如何解决此错误;未捕获类型错误:b.slice不是函数;在select2插件上会发生这种情况吗?

Php 如何解决此错误;未捕获类型错误:b.slice不是函数;在select2插件上会发生这种情况吗?,php,jquery,ajax,jquery-select2,Php,Jquery,Ajax,Jquery Select2,我有以下jquery函数: $("#cliente").select2({ placeholder: '--select--', minimumInputLength: 3, ajax: { url: path+'js/php-files/autocomplete.php', dataType: 'json', delay: 250, data: function (params) {

我有以下jquery函数:

$("#cliente").select2({
    placeholder: '--select--',
    minimumInputLength: 3,
    ajax: {
        url: path+'js/php-files/autocomplete.php',
        dataType: 'json',
        delay: 250,
        data: function (params) {
            return {
                term: params.term // search term
            };
        },
        results: function (data) {
            return {
                results: data.results
            };
        }
    }
});
在PHP文件(autocomplete.PHP)中,我有:

我使用plugin select2版本4.0.0。 我如何解决这种情况

谢谢

$bo=新客户bo();
$bo = new ClienteBO();
$list = $bo->findAutoComplete($_GET['term']);

$results = array();
$first = true;
$count = count($list);
for ($i = 0; $i < $count; $i++) {
    $results['id'] = $list[$i]['codCliente'];
    $results['text'] = htmlspecialchars($list[$i]['nomeCliente']);
    $ret['results'][$i] = $results;
}

echo json_encode($ret);
$list=$bo->findAutoComplete($\u GET['term']); $results=array(); $first=true; $count=计数($list); 对于($i=0;$i<$count;$i++){ $results['id']=$list[$i]['codCliente']; $results['text']=htmlspecialchars($list[$i]['nomeCliente']); $ret['results'][$i]=$results; } echo json_编码($ret);
我得到了完全相同的错误,我使用的是laravel,我只有在使用ajax请求从控制器获取值时才会得到错误。我意识到,在一个例子中,它是有效的,在另一个例子中,它是导致这个错误。在这里使用集合是我从控制器发送的内容:

作品:

PHP

JSON

不起作用:

PHP

JSON

问题

我意识到是格式问题。由于数字键的唯一功能而改变格式的方式丢失了序列。我怀疑数组键可能是原因,也可能是您吐出的数组格式

可能的解决办法

当我尝试使用values()函数来重置数组键时,它开始工作了

PHP

JSON

^快速提示确保您在chrome控制台上的响应与上一行类似,这意味着每个json对象前面没有数字键,所有“结果”都包含在一个数组中。

附属物:


当数组中有空值时,我也遇到了这个问题。上面的解决方案部分修复了这一问题,因为在第一次显示选项时,当我开始过滤时,它会工作,而不是因为存在空值。祝你好运。

同样,我以processResults为例,错误更改为UncaughtTypeError:无法读取未定义书籍的属性“slice”,就像在开发过程中缩小代码一样。变量名被损坏(
a,b
…),所有内容(包括错误)都发生在第1行或第2行。调试不是很方便。错误似乎发生在
removepholder
函数中,但不在您提供的代码中。请使用非缩略代码,并发布发生错误的实际变量名称和行。好的,伙计!我删除了占位符命令,错误没有发生。非常感谢。哈,所以当一段代码出现错误时,您只需删除它。这是一个消除bug的有趣方法:)我也面临同样的问题,select2的文档仍然有点糟糕。
<div class="form-group">
    <label for="cliente">Cliente:</label>
    <select name="cliente" id="cliente" class="form-control">
        <option></</option>
    </select>
</div>
Uncaught TypeError: b.slice is not a function               select2.min.js:2
a.removePlaceholder             @ select2.min.js:2
j                               @ select2.min.js:1
a.append                        @ select2.min.js:2
j                               @ select2.min.js:1
(anonymous function)            @ select2.min.js:1
d.invoke                        @ select2.min.js:1
d.trigger                       @ select2.min.js:1
e.trigger                       @ select2.min.js:2
(anonymous function)            @ select2.min.js:2
(anonymous function)            @ select2.min.js:2
(anonymous function)            @ jquery.min.js:2
j                               @ jquery.min.js:2
k.fireWith                      @ jquery.min.js:2
x                               @ jquery.min.js:4
b                               @ jquery.min.js:4
$bo = new ClienteBO();
$list = $bo->findAutoComplete($_GET['term']);

$results = array();
$first = true;
$count = count($list);
for ($i = 0; $i < $count; $i++) {
    $results['id'] = $list[$i]['codCliente'];
    $results['text'] = htmlspecialchars($list[$i]['nomeCliente']);
    $ret['results'][$i] = $results;
}

echo json_encode($ret);
$query = Exchange::where('active', 1)->select(['id', 'name as text'])->get()->toArray();

return json_encode(['results' => $exchanges]);
{"results":[{"id":12,"text":"Binance"}]}
$bases = ExchangePair::where('active', 1)->get()->pluck('base')->unique()->toArray();

json_encode(['results' => $bases]);
{"results":{"0":{"id":12,"text":"BTC"},"4":{"id":120,"text":"456"},"5":{"id":1,"text":"ETH"},"12":{"id":119,"text":"USDT"},"102":{"id":3,"text":"BNB"}}}
$bases = ExchangePair::where('active', 1)->get()->pluck('base')->unique()->values()->toArray();

json_encode(['results' => $bases]);
{"results":[{"id":12,"text":"BTC"},{"id":120,"text":"456"},{"id":1,"text":"ETH"},{"id":119,"text":"USDT"},{"id":3,"text":"BNB"}]}