Как устранить ошибку? Uncaught TypeError: b.slice не является функцией & quot; что происходит на плагине select2?

У меня есть следующая функция 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) у меня есть:

$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'] = $results;
echo json_encode($ret);

И HTML-файл

<div class="form-group">
<label for="cliente">Cliente:</label>
<select name="cliente" id="cliente" class="form-control">
<option></</option>
</select>
</div>

Когда я вижу ошибку Chrome консоли, я получаю следующий результат:

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

Я использую плагин select2 версии 4.0.0.
Как я могу разрешить эту ситуацию?

Спасибо!

0

Решение

Я получаю точно такую ​​же ошибку, я использую laravel, я получаю ошибку только тогда, когда я использую ajax-запрос для получения значений из контроллера. Я понял, что в одном случае это работало, а в другом это вызывало эту ошибку. Использование коллекции вот что я отправил с контроллера:

РАБОТАЕТ:

PHP

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

return json_encode(['results' => $exchanges]);

JSON

{"results":[{"id":12,"text":"Binance"}]}

НЕ РАБОТАЕТ:

PHP

$bases = ExchangePair::where('active', 1)->get()->pluck('base')->unique()->toArray();

json_encode(['results' => $bases]);

JSON

{"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"}}}

ПРОБЛЕМА

Я понял, что это было форматирование. То, как форматирование изменялось из-за уникальной функции, цифровые клавиши теряли последовательность. Я подозреваю, что виноваты ключи массива или формат массива, который вы выплевываете.

ВОЗМОЖНОЕ РЕШЕНИЕ

Я получил это работает, когда я пытался использовать функцию values ​​() для сбросить клавиши ARRAY.

PHP

$bases = ExchangePair::where('active', 1)->get()->pluck('base')->unique()->values()->toArray();

json_encode(['results' => $bases]);

JSON

{"results":[{"id":12,"text":"BTC"},{"id":120,"text":"456"},{"id":1,"text":"ETH"},{"id":119,"text":"USDT"},{"id":3,"text":"BNB"}]}

^ Небольшое примечание: убедитесь, что ваш ответ на консоли chrome выглядит как строка выше, означая, что перед каждым объектом json нет цифровых клавиш, а все «результаты» заключены в массив.

Appendum:

У меня также была эта проблема, когда в моем массиве были нулевые значения. Вышеупомянутое решение частично исправило это в том, что при первом отображении опций это работало бы, когда я начал фильтровать это, не было бы из-за наличия нулевых значений. Удачи.

0

Другие решения

$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);
-3

По вопросам рекламы [email protected]