Я некоторое время ломал голову над этим и, наконец, решил попросить помощи, я пытаюсь скопировать учебник Select2 для JSON с приведенным ниже кодом, так как мы запускаем PHP 5.1 (это старая платформа), у меня есть пришлось добавить функцию для создания JSON вручную.
Любая помощь в получении этой работы будет принята с благодарностью
ТЕСТ HTML
<style>
#wgtmsr{
width:150px;
}
</style>
<h1>IRBs</h1>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" />
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.full.js"></script>
<form>
<select class="js-irb" multiple="multiple" id="wgtmsr"></select>
</form>
<script type="text/javascript">
jQuery.noConflict();
function formatIRB (data) {
if (data.loading) return data.text;
var markup = '<p>' + data.text + '</p>';
return markup;
}
function formatSelection (data) {
return data.id || data.text;
}
jQuery(document).ready(function() {
jQuery(".js-irb").select2({
ajax: {
url: "ajax/irb",
dataType: 'json',
delay: 250,
data: function (params) {
return {
q: params.term// search term
};
},
processResults: function (data) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data
};
},
cache: true
},
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
minimumInputLength: -1,
templateResult: formatIRB, // omitted for brevity, see the source of this page
templateSelection: formatSelection // omitted for brevity, see the source of this page
});
});
</script>
ТЕСТ JSON
<?php
/**
* Supplementary json_encode in case php version is < 5.2 (taken from http://gr.php.net/json_encode)
*/
if (!function_exists('json_encode'))
{
function json_encode($a=false)
{
if (is_null($a)) return 'null';
if ($a === false) return 'false';
if ($a === true) return 'true';
if (is_scalar($a))
{
if (is_float($a))
{
// Always use "." for floats.
return floatval(str_replace(",", ".", strval($a)));
}
if (is_string($a))
{
static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
}
else
return $a;
}
$isList = true;
for ($i = 0, reset($a); $i < count($a); $i++, next($a))
{
if (key($a) !== $i)
{
$isList = false;
break;
}
}
$result = array();
if ($isList)
{
foreach ($a as $v) $result[] = json_encode($v);
return '[' . join(',', $result) . ']';
}
else
{
foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
return '{' . join(',', $result) . '}';
}
}
}
$db = Database::GetConnection('default');
#$result = $db->Query("SELECT i.ID,i.IRBNO, i.Name AS irbName FROM irb i WHERE irbName LIKE '%".strtoupper($_GET['q'])."%' or '%".($_GET['q'])."%'");
$result = $db->Query("SELECT ID,IRBNO, Name FROM irb WHERE Name LIKE ? OR IRBNO LIKE ? ORDER BY IRBNO ASC LIMIT 0,4", 'ss','%' . $_GET['q'] . '%','%' . $_GET['q'] . '%');
if(count($result) > 0){
foreach($result as $row){
//while($row = $result->fetch_array()) {
//$answer[] = array("id"=>$row['ID'], "text"=>$row['Name']);
$answer[] = array("id"=>$row['ID'],"text"=>$row['IRBNO']." - ".$row['Name']); // the text I want to show is in the form of option id - option
}
}else {
$answer[] = array("id"=>"0", "text"=>"No Results Found...");
}
echo json_encode($answer);
?>
JSON RETURN
[{"id":1,"text":"1 - TEST IRB"},{"id":2,"text":"1 - TEST IRB2"}]
Итак, это была проблема с кодом сайта, добавляющим заголовки к возвращению JSON, я нашел проблему с помощью developertools и наблюдая за ответом jQuery 🙂
Других решений пока нет …