Как отфильтровать данные подачи страниц JSON в Select2? - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь заполнить поле Select2 данными из запроса t-sql.Запрос выполняется на странице PHP, которая переводит вывод в JSON и вызывается в javascript главной страницы.

Главная страница выглядит следующим образом:

<?php
header('Content-type: text/html; charset=UTF-8');
require('db.php');      // Bring in the database connection
include("auth.php");    // Make sure the user is logged in to an account

?>

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1" http-equiv="Content Type" charset="utf-8"/>
    <!-- JQuery -->
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <!-- SELECT 2 -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
</head>

    <body style="background-color: #F5F5F5;">

        <select class="js-data-example-ajax">
        </select>

        <script>
        $('.js-data-example-ajax').select2({
            width: '250px',
            ajax: {
                url: 'http://10.1.248.41/TFM-Project/ImportINjson.php',
                dataType: 'json'
                // Additional AJAX parameters go here
          }
        });
        </script>
    </body>
</html>

Моя страница JSONвыглядит следующим образом:

<?php
require('db.php');      // Bring in the database connection
include("auth.php");    // Make sure the user is logged in to an account

$search = $_GET['search'];

//JSON Table Stuff
$sql = "SELECT DISTINCT [IN] AS id, Nom as text
        FROM dbo.[TFM_NumérosIN2012]
        ;";

$stmt = sqlsrv_query($con,$sql);

$result = array();

do {
    while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
        $result[] = $row;
    }
} while (sqlsrv_next_result($stmt));

sqlsrv_free_stmt($stmt);

$data2 = json_encode($result);

echo '{ "results":' . $data2 . '}';

?>

Вывод данных на странице JSON выглядит следующим образом:

{ "results":[{"id":2,"text":"SMITH Sean"},{"id":3,"text":"CHARLES charley"},{"id":4,"text":"TFC Madrid"},{"id":5,"text":"VAN DAMME jean claude"}]}

Данные загружаются в список выбора без каких-либо проблем.Тем не менее, я попытался отфильтровать данные несколькими способами, и ничего не получилось.Я попытался добавить параметр данных и передать переменную поиска на страницу php / JSON и сослаться на переменную $ sql в качестве предложения where, но это ничего не возвращает

Чтобы попытаться отфильтровать данныеЯ изменил javascript на это:

$('.js-data-example-ajax').select2({
          width: '250px',
          ajax: {
            url: 'http://10.1.248.41/TFM-Project/ImportINjson.php',
            dataType: 'json',
            data: function (params) {
              var query = {
                search: params.term
              }

              // Query parameters will be ?search=[term]&type=public
              return query;
            }
          }
        });

Но это нарушает мой выбор и выдает сообщение «Результаты не могут быть загружены».

Кто-нибудь знает, что я делаюздесь не так?

Ура,

1 Ответ

1 голос
/ 12 апреля 2019

В конце вашего php-файла просто введите следующую строку:

 echo json_encode($result);

В вашем html / js файле:

<link href='https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css' rel='stylesheet' type='text/css'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js'></script>
<select name='js-data-example-ajax' class='js-data-example-ajax'></select>

$(document).ready(function()
{


$('.js-data-example-ajax').select2({
      placeholder: "Search for product",
      minimumInputLength: 1,
      width: '250px',
      ajax: {
        url: 'http://10.1.248.41/TFM-Project/ImportINjson.php',
        dataType: 'json',
        data: function (params) {
            var query = {
            search: params.term,
            type: 'public'
          }
          console.log("query : "+query.search);
          return query;
       },
       processResults: function (response) {
        console.log("response : "+response);
          return {
            results: $.map(response, function(obj) {
              console.log("response obj.id: "+obj.id);
              console.log("response obj.text: "+obj.text);
              return { id: obj.id, text: obj.text };
            })
        };
      },
       cache: false
     }
    });

});
...