无法获取数组结果来填充 jquery select2
cannot get array results to populate jquery select2
我正在尝试让 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 对象的搜索框中键入内容时,页面什么也拉不出来...
根据 specs 正确的格式是:
{
"results": [
{
"id": 1,
"text": "Option 1"
},
{
"id": 2,
"text": "Option 2"
}
],
"pagination": {
"more": true
}
}
因此您需要遍历结果并创建一个与该格式匹配的数组。
感谢 imvain2 查看输出格式的建议。确切的解决方案......而不是
$response = mysqli_fetch_all($result);
我循环如下,保持其他一切不变:
while($row = mysqli_fetch_array($result)) {
$response[] = array("id"=>$row['id'],"text"=>$row['text'])
;}
而且效果很好。
我正在尝试让 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 对象的搜索框中键入内容时,页面什么也拉不出来...
根据 specs 正确的格式是:
{
"results": [
{
"id": 1,
"text": "Option 1"
},
{
"id": 2,
"text": "Option 2"
}
],
"pagination": {
"more": true
}
}
因此您需要遍历结果并创建一个与该格式匹配的数组。
感谢 imvain2 查看输出格式的建议。确切的解决方案......而不是
$response = mysqli_fetch_all($result);
我循环如下,保持其他一切不变:
while($row = mysqli_fetch_array($result)) {
$response[] = array("id"=>$row['id'],"text"=>$row['text'])
;}
而且效果很好。