Select2 застрял на «Поиске ...» Параметры раскрывающегося списка AJAX

Я столкнулся с проблемой, когда в раскрывающемся списке Select2 продолжает отображаться «Поиск ...» (скриншот прилагается)

Поиск... застрявший скриншот

Это мой JS-код:

<script>
    $(document).ready(function() {
        $("#js-data-example-ajax").select2({
            placeholder: 'Search for a stock',
            ajax: {
            url: "http://127.0.0.1:8000/stocks_list",
            contentType: 'application/json',
            dataType: 'json',
            type: "GET"
            },
        });
    });
</script>

Поле выбора HTML:

<select style = "width: 300px;" id = "js-data-example-ajax" name = "js-data-example-ajax" class = "js-data-example-ajax"></select>

Конечная точка в приведенном выше вызове AJAX возвращает объект JSON с ключом «результаты» и списком объектов для результатов поиска (как и ожидалось Select2), как показано ниже:

Ответ от скриншота локальной конечной точки

Я ожидаю отобразить «текстовые» поля в качестве результатов раскрывающегося списка в результатах поиска, и до сих пор я следил за документами Select2.

Ваш веб-сервер находится на том же имени хоста и порте? Итак, в этом случае вы разговариваете с 127.0.0.1 через порт 8080 — это URL-адрес, к которому вы подключаетесь, который запускает этот jQuery также на 127.0.0.1 и порту 8080, иначе вы столкнетесь с проблемами [CORS], которых у вас нет. заявил, что говорит «консоль» браузера, нажмите 12, перейдите на вкладку консоли и найдите любые ошибки.

Barkermn01 27.11.2022 06:19

Спасибо @Barkermn01, я изначально подозревал это, но я даже пробовал внешние URL-адреса API (например, те, что указаны в документах Select2 -> api.github.com/orgs/select2/repos), это не решило проблему. Моя консоль пуста, сообщений об ошибках нет.

gakshat 27.11.2022 06:37

Внешний по-прежнему будет вызывать ошибки CORS, и, извините, последний комментарий F12, но вам не разрешено запрашивать ресурсы с других сайтов (другая схема, имя хоста или IP-адрес или порт), если они не отправляют заголовки, авторизующие ваш источник. пожалуйста, прочитайте developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Barkermn01 27.11.2022 06:39

Я добавил 'Access-Control-Allow-Origin' = "localhost/scalefin/dashboard/investments.php" в заголовок моего API, но все та же проблема.

gakshat 27.11.2022 07:05

вам также нужны Access-Control-Allow-Method: GET, OPTIONS, и эти 2 не точны, но это то, что я использую для них Access-Control-Expose-Headers: Origin, X-Requested-With, Content-Type и Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type

Barkermn01 27.11.2022 07:08

Теперь я получил ошибку на консоли; Доступ к XMLHttpRequest по адресу «127.0.0.1:8000/stocks_list?_type=query » из источника « localhost» был заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: нет «Доступ Заголовок -Control-Allow-Origin присутствует на запрошенном ресурсе. Но я уже добавил эту политику в заголовок ответа?

gakshat 27.11.2022 07:16

Это будет означать, что вы еще не добавили заголовки CORS, добавили ли вы их в код страницы stocks_list (я предполагаю, что вы это сделали), поэтому нам нужно будет увидеть код для файла PHP, затем

Barkermn01 27.11.2022 07:17

Да, я дважды подтвердил на вкладке «Сеть» в Chrome, заголовок ответа для моего API показывает: заголовки-разрешения-доступа: Origin, X-Requested-With, Content-Type access-control-allow-method: GET, OPTIONS доступ-контроль-разрешение-происхождение: локальный хост доступ-контроль-разоблачения-заголовки: происхождение, X-Requested-With, Content-Type

gakshat 27.11.2022 07:20

Я добавил и ответил, что это общий вопрос, но для того, чтобы исправить это именно в вашем коде, вам потребуется добавить код PHP к вашему вопросу.

Barkermn01 27.11.2022 07:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
237
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, ваша ошибка вызвана CORS,

CORS — это боль в заднице для локальной разработки, то, как вы справляетесь с CORS, — это цель запроса AJAX, которая должна возвращать определенные заголовки, и самый простой способ сделать это в PHP — просто использовать приведенный ниже код:

Это самое допустимое, что вы можете сделать с поддержкой CORS для пользовательских заголовков, если вам нужно использовать пользовательские заголовки, которые вам нужны для обновления заголовков Access-Control-Allow-Headers и Access-Control-Expose-Headers.

<?php
$givenOrigin = get_header("Origin")??get_header("origin");

header("Access-Control-Allow-Origin: {$givenOrigin}");
header("Access-Control-Allow-Headers: GET, POST, PUT, PATH, DELETE, OPTIONS, HEAD"); // this allows all HTTP methods
header("Access-Control-Allow-Methods: Origin, X-Requested-With, Content-Type, Accept, localization");
header("Access-Control-Expose-Headers: Origin, X-Requested-With, Content-Type, Accept, localization");

Я добавил это в свой <head>: <?php header("Access-Control-Allow-Origin: 127.0.0.1:8000/stocks_list"); header("Access-Control-Allow-Headers: GET, OPTIONS"); // это разрешает все HTTP-методы header("Access-Control-Allow-Methods: Origin, X-Requested-With, Content-Type, Accept, localization"); header("Access-Control-Expose-Headers: Origin, X-Requested-With, Content-Type, Accept, локализация"); ?>

gakshat 27.11.2022 07:31

Заголовки PHP не должны выводиться перед любым содержимым, оно должно быть в самом верху вашего файла. Единственная строка кода, которая должна быть выше этого, — это если вы используете пространство имен, то определение namespace идет непосредственно перед этим блоком кода. если вы используете error_reporting(E_ALL)l, вы увидите, что он жалуется на заголовки после содержимого

Barkermn01 27.11.2022 07:33

Я добавил его даже выше моего открытия <html> и чуть ниже него, все та же ошибка в консоли. Даже пробовал «Access-Control-Allow-Origin: *»

gakshat 27.11.2022 07:44

Поэтому, не видя вашего PHP-кода и исходя из того, что вы сказали, я понятия не имею, почему он не работает, но мы сузили его до того, что это определенно ошибка CORS.

Barkermn01 27.11.2022 07:46

Это мой код до тела: codeshare.io/VZMeQ4

gakshat 27.11.2022 07:52

отредактируйте свой вопрос, чтобы включить его, пожалуйста...

Barkermn01 27.11.2022 07:52

Добавил ссылку выше

gakshat 27.11.2022 07:55

о, вы помещаете это не в тот файл, вам нужно поместить его в файл, который дает вам stocks_list, а не в файл, выполняющий AJAX-соединение с ним.

Barkermn01 27.11.2022 07:57

Другие вопросы по теме