Сделайте правильный формат данных json для select2 - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь ajax удаленных данных для select2 (используя 4.0.6-rc.1), попробовал несколько примеров, сначала параметр q был неопределен, но я решил, и теперь выбор не дает мне результаты, не знаю, как форматировать данные json, попробовал следующее и получил следующую ошибку в консоли:

$('#compose_username').select2({
    dropdownParent: $("#modal-compose"),
    placeholder: "Search country here...",
    ajax: {
        url: "username.php",
        dataType: 'json',
        delay: 250,
        data: function (params) {
            return {
                q: params.term, // search term
                page: params.page
            };
        },
        processResults: function (data, params) {
            params.page = params.page || 1;
            return {
                results: data.items,
                pagination: {
                    more: (params.page * 30) < data.total_count
                }
            };
        },
        cache: false
    },
    // escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
    minimumInputLength: 1,
    templateResult: formatRepo,
    templateSelection: formatRepoSelection
});

function formatRepo(repo) {
    if (repo.loading) return repo.text;

    return repo.desc;
}

function formatRepoSelection(repo) {
    return repo.desc || repo.text;
}

USERNAME.PHP

include('../core/config.php');

try {
    $stmt = $db_con->query("SELECT id,username FROM users WHERE username LIKE '%".$_GET['q']."%' LIMIT 10");
    $stmt->execute();
    $json = [];

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $json[] = ['id'=>$row['id'], 'username'=>$row['username']];
    }

    echo json_encode($json);
} catch(PDOException $e) {
    echo $e->getMessage();
}

JSON DATA:

если я наберу a, то получаю следующее в консоли, но в select2

опция не отображается
(3) [{…}, {…}, {…}]
0
:
{id: "1", username: "admin"}
1
:
{id: "29", username: "adil3310"}
2
:
{id: "30", username: "asdsad"}
length
:
3
__proto__
:
Array(0)

1 Ответ

0 голосов
/ 31 августа 2018

После большой борьбы мне удалось заставить его работать, причина, по которой я пытался проанализировать данные Json, и они уже были проанализированы, поэтому я использовал их, и это работает. Ниже приведен полный рабочий пример, который может помочь другим:

  $('#compose_username').select2({
        // SET THIS IF SELECT IS IN A MODAL
        dropdownParent: $("#modal-compose") ,
        placeholder: "Search country here...",
       // MINIMUM INPUT TO SEARCH BEFORE
        minimumInputLength: 3,
        ajax: {
            url: "username.php",
            dataType: 'json',
            delay: 250,
            cache: false,
            data: function (params) {
                $('#compose_username').val(null).trigger('change');
                return {
                    q: params.term, // search term
                    page: params.page
                };
            },
            processResults: function(data, page) {
                console.log(data);
                var result = $.map(data, function (item) { return { id: item.id, text: item.username }});
                return { results: result };
            }
        }
  });

PHP (ПОЛУЧИТЬ СПИСОК ИМЯ ПОЛЬЗОВАТЕЛЯ, мы можем установить лимит по запросу)

try{
    $stmt = $db_con->query("SELECT id,username FROM users WHERE username LIKE '%".$_GET['q']."%' LIMIT 10");
    $stmt->execute();
        $json = [];
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
             $json[] = ['id'=>$row['id'], 'username'=>$row['username']];
        }
        echo json_encode($json);
}
catch(PDOException $e){
    echo $e->getMessage();
}
...