2017-04-21 53 views
0

我试图使用Select2和来自服务器的JSON数据创建一个下拉列表。我试图按照他们的例子,它的工作原理,但我很难完成它。使用Select2从服务器检索JSON

我使用下面的代码从数据库中的数据,我可以打印到控制台,但我不能得到的数据显示为一个下拉

$(".js-example-basic-single").select2({ 
    ajax: { 
     url: "DBHandler.php?k=", 
     dataType: 'json', 
     delay: 250, 
     data: function (params) { 
      console.log(params.term); 
      return {      
       search: params.term // search term 
      }; 
     }, 
     processResults: function (data, params) { 
      // 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, except to indicate that infinite 
      // scrolling can be used 
      console.log(data) 
      params.page = params.page || 1; 
      return { 
       results: data.items 
       //pagination: { 
        //more: (params.page * 30) < data.total_count 
       //} 
      }; 
     }, 
     cache: true 
    }, 
    escapeMarkup: function (markup) { return markup; }, // let our custom formatter work 
    minimumInputLength: 3 
}); 

我的HTML :

<select class="js-example-basic-single form-control" multiple="multiple"> 
</select> 

我的PHP:

$stmt = $this->con->prepare($query); 
$stmt->execute(); 

$results = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); 
echo json_encode(array_unique($results)); 

的console.log(数据)输出:

Zuber, W. P., Mrs.,Zoellner String Quartet,Zeta Chi,YWCA,Yonge, H. M.,YMCA Friendship Council,YMCA,Yellow Fever,yearbooks,Yarbrough, Reed, Mrs.,Yancey, William L.,Yale University,Yale,Wynne, W. W.,Wynne, Andrew Jackson "Jack",writing,Wright, T. P. (Thomas Parks),Wright, Homer,Wright, G. H.,Wright & Co.,wrestling,Worms Orchestra,World War I,World War 1,World Series,World Fellowship Campaign,Wooten, B. A. (Benjamin Allen),Woodmen's Circle,Woodmen of the World,Woodall, A. M. (Aaron Montgomery),Wood, Leonard, 1860-1927,Wood, Clement, 1888-1950,Wood, C. P.,wood,women,Woman's Missionary Society,Wolcott, Edward Oliver, 1848-1905,Wofford College,Wisconsin,Wirt Society student organizations,Wirt Society,Wirt Literary Society,Winston, Margaret,Winston, E. T.,Windham, 

所以我的问题是我如何获得data.items来填充<select></select>标签?

+0

做你试图循环'data.items'做沿线'$ .append'东西,你的'select'下拉? –

+0

我累了。让我再尝试一次。 – Sedrick

+0

我的第一个评论是错误的,我在文档中看到,如果你从'select2'使用ajax而不是这行'result:data.items,'应该为你呈现结果,你可以粘贴你的json数据,请摘录 –

回答

0

像@Kresimir Pendic痛说,问题是我的JSON字符串。它的格式不正确。

此代码只检索一列。然后它试图将该数据转换为JSON
完全错误

$results = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); 
echo json_encode(array_unique($results)); 

为了达到正确的结构,我不得不创建outputArray。然后我使用for循环遍历result中返回的每个值。我通过创建一个结构为'id' => $counter, 'text' => $result[0]的新Array将每个值存储到outputArray中。每个新创建的Array都被推入outputArray。最后,我用json_encode($outputArray)outputArrayecho编了结果。

$outputArray = array();  
for($i = 0; $result = $stmt->fetch(); $i++) 
{ 
    $counter = $i + 1; 
    array_push($outputArray, array('id' => $counter, 'text' => $result[0])); 
}   
$json = json_encode($outputArray); 
echo $json;   
1

我认为你需要格式化DIFF这样你的JSON ..我会贴上一个需要有这样的结构,,有子节点items与价值观的阵列ATLEAST idname(您下拉列表填充值和名称值显示下拉打开时)

{ 
    "items": [ 
    { 
     "id": "1225212", 
     "name": "Name 1" 
    }, 
    { 
     "id": "6546542", 
     "name": "Name 2" 
    } 
    ] 
} 

希望帮助,运气好,等我知道,选择2可以在AXX :)

+0

我会试试看。谢谢! – Sedrick