Данные AJAX не будут загружаться в поле Multi Select во время поиска - PullRequest
0 голосов
/ 02 января 2019

Я создал окно поиска для ключевых слов, и я хочу попробовать использовать JSON / AJAX для поиска ключевых слов, которые нужно ввести.

Последние два часа я безуспешно пытался заставить это работать, и я знаю, что что-то упустил, но не могу понять, как это сделать. Я просто получаю сообщение, результаты не могут быть загружены (это сообщение приходит от cdnjs для select2). Когда я загружаю страницу keyword_search.php, я получаю результаты в ожидаемом формате (см. Код ниже):

Я создал окно с несколькими вариантами выбора

<select class="js-example-basic-multiple" multiple="multiple" name="img_keywords[]" style="width:100%">
                <?php
                    $path = $_SERVER['DOCUMENT_ROOT'];
                    $path .= "/includes/connections/mysqli.php";
                    require($path);

                    $sql = "SELECT * 
                            FROM tbl_photos_keywords_all
                            GROUP BY pa_keyword
                            ";

                    $data = $link->query($sql);

                    $keywords = $row['img_keywords'];
                    $selected = explode(',', $keywords);

                    while($row2 = $data->fetch_assoc()) {

                            $isSelected = in_array($row2['pa_keywordID'], $selected) ? "selected='selected'" : "";

                            echo "<option {$isSelected} value='{$row2['pa_keywordID']}'>{$row2['pa_keyword']}</option>";

                    }
                        $link->close();
                ?>
    </select>

И мой код JavaScript:

<script>
       $(document).ready(function() {
        $('.js-example-basic-multiple').select2({
            tags: true,
            tokenSeparators: [","],
            createSearchChoice: function (term, data) {

                if (term.trim().length > 0) {
                    if ($(data).filter(function () {
                      return this.text.toLowerCase().localeCompare(term.toLowerCase()) === 0;
                    }).length === 0) {
                        return {
                            id: term,
                            text: term,
                            isNew: true // this is necessary to check if the item is newly added or not
                        };
                    }
                }
            },
            multiple: true,
            minimumInputLength: 1,
            allowClear: true,    

            ajax: {
                url: "keyword_search.php",
                dataType: 'json',
                type: "GET",
                quietMillis: 50,
                data: function (term) {
                    return {
                        term: name
                    };
                },
                results: function (data) {
                    return {
                        results: $.map(data, function (item) {
                            return {
                                id: item.id,
                                text: item.name
                            }
                        })
                    };
                }
            }
    }
            );
            });

    </script>

Мой файл keyword_search.php:

<?php
    $path = $_SERVER['DOCUMENT_ROOT'];
    $path .= "/includes/connections/mysqli.php";
    require($path);

    $sql = "SELECT * 
            FROM tbl_photos_keywords_all
            ORDER BY pa_keyword
            ";

    $data = $link->query($sql);
    $dataPoints = array();

    while($row2 = $data->fetch_assoc()) {
            $point = array("id" => $row2['pa_keywordID'], "name"=> htmlspecialchars($row2['pa_keyword']));
            array_push($dataPoints, $point);
    }
        echo json_encode($dataPoints, JSON_NUMERIC_CHECK);
        $link->close();
?>
...