Я тестирую плагин select2 на своей локальной машине. Но почему-то. он не собирает данные из базы данных.
Я пытался несколько раз, но не смог найти проблему.
Ниже приведен код.
<div class="form-group"> <div class="col-sm-6"> <input type="hidden" id="tags" style="width: 300px"/> </div> </div> <script type="text/javascript"> var lastResults = []; $("#tags").select2({ multiple: true, placeholder: "Please enter tags", tokenSeparators: [","], initSelection : function (element, callback) { var data = []; $(element.val().split(",")).each(function () { data.push({id: this, text: this}); }); callback(data); }, ajax: { multiple: true, url: "fetch.php", dataType: "json", type: "POST", data: function (params) { return { q: params.term // search term }; }, results: function (data) { lastResults = data; return data; } }, createSearchChoice: function (term) { var text = term + (lastResults.some(function(r) { return r.text == term }) ? "" : " (new)"); return { id: term, text: text }; }, }); $('#tags').on("change", function(e){ if (e.added) { if (/ \(new\)$/.test(e.added.text)) { var response = confirm("Do you want to add the new tag "+e.added.id+"?"); if (response == true) { alert("Will now send new tag to server: " + e.added.id); /* $.ajax({ type: "POST", url: '/someurl&action=addTag', data: {id: e.added.id, action: add}, error: function () { alert("error"); } }); */ } else { console.log("Removing the tag"); var selectedTags = $("#tags").select2("val"); var index = selectedTags.indexOf(e.added.id); selectedTags.splice(index,1); if (selectedTags.length == 0) { $("#tags").select2("val",""); } else { $("#tags").select2("val",selectedTags); } } } } }); </script>
fetch.php
Я проверил fetch.php, и он работает нормально. Он возвращает данные.
<?php require('db.php'); $search = strip_tags(trim($_GET['q'])); $query = $mysqli->prepare("SELECT tid,tag FROM tag WHERE tag LIKE :search LIMIT 4"); $query->execute(array(':search'=>"%".$search."%")); $list = $query->fetchall(PDO::FETCH_ASSOC); if(count($list) > 0){ foreach ($list as $key => $value) { $data[] = array('id' => $value['tid'], 'text' => $value['tag']); } } else { $data[] = array('id' => '0', 'text' => 'No Products Found'); } echo json_encode($data); ?>
.<?php require('db.php'); $search = strip_tags(trim($_GET['q'])); $query = $mysqli->prepare("SELECT tid,tag FROM tag WHERE tag LIKE :search LIMIT 4"); $query->execute(array(':search'=>"%".$search."%")); $list = $query->fetchall(PDO::FETCH_ASSOC); if(count($list) > 0){ foreach ($list as $key => $value) { $data[] = array('id' => $value['tid'], 'text' => $value['tag']); } } else { $data[] = array('id' => '0', 'text' => 'No Products Found'); } echo json_encode($data); ?>
Я пытаюсь создать тегирование и проверит тег в базе данных. если тег не найден, пользователь может создать новый тег, который будет сохранен в базе данных и отображен в пользовательском выборе пользователя.
На данный момент я еще не создал страницу для сохранения тегов в базе данных. Я также попытался использовать select2 версии 3.5 и 4.0.1 .
Это первый раз, когда я пытаюсь выбрать плагин select2 . Поэтому, пожалуйста, проигнорируйте, если я сделал глупые ошибки. Я извиняюсь за это.
Спасибо за ваше время.
Редактировать:
Я проверил в firebug и нашел данные fetch.php не получил никакого значения из поля ввода. это похоже на проблему в Ajax. Потому что он не отправляет значение q.
Конфигурация для select2 v4 + отличается от v3.5 +
Он будет работать для select2 v4:
HTML
<div class="form-group"> <div class="col-sm-6"> <select class="tags-select form-control" multiple="multiple" style="width: 200px;"> </select> </div> </div>
JS
$(".tags-select").select2({ tags: true, ajax: { url: "fetch.php", processResults: function (data, page) { return { results: data }; } } });
Вот ответ. как получить данные из базы данных.
Tag.php
<script type="text/javascript"> var lastResults = []; $("#tags").select2({ multiple: true, //tags: true, placeholder: "Please enter tags", tokenSeparators: [","], initSelection : function (element, callback) { var data = []; $(element.val().split(",")).each(function () { data.push({id: this, text: this}); }); callback(data); }, ajax: { multiple: true, url: "fetch.php", dataType: "json", delay: 250, type: "POST", data: function(term,page) { return {q: term}; //json: JSON.stringify(), }, results: function(data,page) { return {results: data}; }, }, minimumInputLength: 2, // max tags is 3 maximumSelectionSize: 3, createSearchChoice: function (term) { var text = term + (lastResults.some(function(r) { return r.text == term }) ? "" : " (new)"); // return { id: term, text: text }; return { id: $.trim(term), text: $.trim(term) + ' (new tag)' }; }, }); $('#tags').on("change", function(e){ if (e.added) { if (/ \(new\)$/.test(e.added.text)) { var response = confirm("Do you want to add the new tag "+e.added.id+"?"); if (response == true) { alert("Will now send new tag to server: " + e.added.id); /* $.ajax({ type: "POST", url: '/someurl&action=addTag', data: {id: e.added.id, action: add}, error: function () { alert("error"); } }); */ } else { console.log("Removing the tag"); var selectedTags = $("#tags").select2("val"); var index = selectedTags.indexOf(e.added.id); selectedTags.splice(index,1); if (selectedTags.length == 0) { $("#tags").select2("val",""); } else { $("#tags").select2("val",selectedTags); } } } } }); </script>
fetch.php
<?php // connect to database require('db.php'); // strip tags may not be the best method for your project to apply extra layer of security but fits needs for this tutorial $search = strip_tags(trim($_POST['term'])); // Do Prepared Query $query = $mysqli->prepare("SELECT tid,tag FROM tag WHERE tag LIKE :search LIMIT 4"); // Add a wildcard search to the search variable $query->execute(array(':search'=>"%".$search."%")); // Do a quick fetchall on the results $list = $query->fetchall(PDO::FETCH_ASSOC); // Make sure we have a result if(count($list) > 0){ foreach ($list as $key => $value) { $data[] = array('id' => $value['tag'], 'text' => $value['tag']); } } else { $data[] = array('id' => '0', 'text' => 'No Products Found'); } // return the result in json echo json_encode($data); ?>
.<?php // connect to database require('db.php'); // strip tags may not be the best method for your project to apply extra layer of security but fits needs for this tutorial $search = strip_tags(trim($_POST['term'])); // Do Prepared Query $query = $mysqli->prepare("SELECT tid,tag FROM tag WHERE tag LIKE :search LIMIT 4"); // Add a wildcard search to the search variable $query->execute(array(':search'=>"%".$search."%")); // Do a quick fetchall on the results $list = $query->fetchall(PDO::FETCH_ASSOC); // Make sure we have a result if(count($list) > 0){ foreach ($list as $key => $value) { $data[] = array('id' => $value['tag'], 'text' => $value['tag']); } } else { $data[] = array('id' => '0', 'text' => 'No Products Found'); } // return the result in json echo json_encode($data); ?>
С приведенным выше кодом я могу получить данные из базы данных. Я получаю помощь от нескольких пользователей от SO. Спасибо всем.
Тем не менее, я все еще уточняю другие области, такие как добавление тега в базу данных. По завершении я выложу полный n окончательный код.