Ошибка выбора 2 типа: b не определено

#javascript #php #jquery #laravel #select2

#javascript #php #jquery #laravel #jquery-select2

Вопрос:

введите описание изображения здесьвведите описание изображения здесьЯ использую select2 для отображения результатов ajax в раскрывающемся списке, но когда я добавляю данные в select2, отображается ошибка

 TypeError: b is undefined
  

JS-код

         var baseurl = $("#baseurl").val();
        $(".myselect").select2({
            placeholder: "Select a inspector",
            allowClear: true,
            ajax: {
                url: baseurl   '/admin/getdata',
                dataType: 'json',
                type: "GET",
                quietMillis: 50,
                data: function (term) {
                    return {
                        term: term.term
                    };
                },
                results: function (data) {
                    var myResults = [];
                    $.each(data, function (index, item) {
                        myResults.push({
                            'id': item.id,
                            'text': item.firstname
                        });
                    });
                    return {
                        results: myResults
                    };
                }
            }
        });
  

term.term содержит значение входного текста в раскрывающемся окне поиска.

HTML

   <select class="myselect" style="width: 50% !important">
        <option></option>
        <option value="AL">Alabama</option>
        <option value="WY">Wyoming</option>
        <option value="KY">Kentucky</option>
  </select>
  

ОТВЕТ JSON

 [{"id":9858,"firstname":"Testing3","status":2,"state":"VA","phone":""},{"id":9857,"firstname":"Testing2","status":2,"state":"VA","phone":""},{"id":9856,"firstname":" david polosky ","status":3,"state":"FL","phone":"(000)000-4141"}]
  

ВЫБЕРИТЕ 2 ССЫЛКИ CDN

     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
  

СЕРВЕРНЫЙ КОД PHP (LARAVEL)

  $searchtext = $request->get('term');
 $data = Inspector::latest('id')
                ->select('id', 'firstname', 'status', 'state', 'phone')
                ->where('firstname', 'LIKE', '%' . $searchtext . '%')
                ->get()->toArray();
 echo json_encode($data);
  

Любая помощь приветствуется.

Комментарии:

1. Где PHP-код?

2. @RaxWeber Ответ, который я показал, является ответом json, возвращенным кодом php.

3. @RaxWeber добавил PHP-код.

4. можете ли вы перейти к обратному вызову результатов и просмотреть данные?

5. @thecodejack Если я предупреждаю («что угодно») при обратном вызове, он не работает.

Ответ №1:

В вашей конфигурации ajax вы используете результаты, вы должны использовать processResults

Попробуйте это

 var baseurl = $("#baseurl").val();
    $(".myselect").select2({
        placeholder: "Select a inspector",
        allowClear: true,
        ajax: {
            url: baseurl   '/admin/getdata',
            dataType: 'json',
            type: "GET",
            quietMillis: 50,
            data: function (term) {
                return {
                    term: term.term
                };
            },
            processResults: function (data) {
                var myResults = [];
                $.each(data, function (index, item) {
                    myResults.push({
                        'id': item.id,
                        'text': item.firstname
                    });
                });
                return {
                    results: myResults
                };
            }
        }
    });
  

Комментарии:

1. Да .. Большое спасибо .. 🙂

Ответ №2:

Aamir@, иногда ошибки вводят в заблуждение. Если вы видите из своего кода, в нем вообще нет ссылки на b . Я считаю, что это должно быть ошибкой, которая выдается из метода вне вашего кода из-за ошибки в вашем коде.

Возможно, вам придется установить точку останова, щелкнув по номеру строки в консоли браузера, а затем проверить стек вызовов, чтобы найти ошибку в коде.

Комментарии:

1. Я не понимаю, почему здесь проголосовали против. Могу ли я узнать, что с этим не так?

2. Извините, но я не голосовал против. В моем файле нет другого js-кода, кроме кода select2.

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

4. Даже если это всего лишь 2 строки кода, это может привести к поломке чего-либо в библиотеке, что может неправильно интерпретировать данные из-за неправильно настроенной переменной в этих 2 строках кода.

5. Да, верно.. Я получил ответ. Я должен был использовать processresults . Пожалуйста, проверьте принятый ответ выше.