не удается получить результаты массива для заполнения jquery select2 - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить jQuery SELECT2 для извлечения данных из запроса mysqli:

[fxn/fxn_select2_series.php]
if(!isset($_POST['searchTerm'])){ 
    $qry_select2_series = 
    "SELECT DISTINCT series_id as 'id', series_title as 'text' 
     FROM `series` WHERE series_title IS NOT NULL" ;
}else{ 
    $search = $_POST['searchTerm'];  
    $qry_select2_series = 
    "SELECT DISTINCT series_id as 'id', series_title as 'text' 
     FROM `series` WHERE series_title IS NOT NULL and series_title LIKE '%".$search."%'" ;
   }

$cxn = new mysqli('localhost', $user, $pass, $db);

$result = mysqli_query($cxn,$qry_select2_series);
$response = mysqli_fetch_all($result);

echo json_encode($response);

Если я открою эту страницу отдельно, я получу правильные результаты в формате массива:

[["1","Spring Revels"],["2","Trois Chansons"]]

Я вставляю запрос в jQuery SELECT2 ...

<fieldset>
    <legend>Title</legend>
    <div class='inputlabel'>
        <label for='title'>Title</label>
        <input type='text' size='64' id='title'>
        <label for 'subtitle'>Subtitle</label>
        <input type='text' size='64' id='subtitle'>
        <label for='series'>Series</label>
        <span><select class="js-example-basic-single" id='select2_series' style='width:32'>
            <option>Select/Search ...</option>
        </select>
        (Enter Opus, Collection, Volume, Libretto, Etc. or select below...)</span>
        <label for='sequence'>Sequence</label>
        <span><input type='number' min='1' max='99' step='1' size='4' id='sequence'>
        (Enter the sequence number of this item in the above series)</span>
</fieldset>
<script type="text/javascript">
$(document).ready(function(){
   $("#select2_series").select2({
      ajax: {
        url: "fxn/fxn_select2_series.php",
        type: "post",
        dataType: 'json',
        delay: 250,
        data: function (params) {
           return {
              searchTerm: params.term // search term
           };
        },
        processResults: function (response) {
           return {
              results: response
           };
        },
        cache: true
      }
   });
});
</script>

Но страница ничего не выдает, когда вы вводите в поле поиска объекта Select2 ...

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Спасибо imvain2 за предложение посмотреть выходной формат. Точное решение ... Вместо

$response = mysqli_fetch_all($result);

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

while($row = mysqli_fetch_array($result)) {
$response[] = array("id"=>$row['id'],"text"=>$row['text'])
;}

И он отлично работает.

0 голосов
/ 27 мая 2020

В соответствии со спецификациями правильное форматирование:

{
  "results": [
    {
      "id": 1,
      "text": "Option 1"
    },
    {
      "id": 2,
      "text": "Option 2"
    }
  ],
  "pagination": {
    "more": true
  }
}

Таким образом, вам нужно будет l oop просмотреть свои результаты и создать массив, соответствующий этому формату.

...