【问题标题】:load ajax array data into select2 dropdown format将ajax数组数据加载到select2下拉格式中
【发布时间】:2016-08-24 05:34:16
【问题描述】:

我在从 ajax 脚本填充下拉数据时遇到问题。 这是我的控制器:

public function ajax_get_kota($idProv='')
{
    $kota = $this->data['namaKota'] = $this->registrasi_model->get_nama_kota($idProv);
    echo json_encode($kota);
}

这是我的模型:

public function get_nama_kota($idProv='')
{
    $query = $this->db->query('SELECT id_kab, nama FROM kabupaten WHERE id_prov = '.$idProv.' ORDER BY nama ASC');
    return $dropdowns = $query->result();
}

并查看:

<div class="form-group form-group-sm has-feedback <?php set_validation_style('Kota')?>">        
    <?php echo form_label('Kota / Kabupaten', 'kota', array('class' => 'control-label col-sm-2')) ?>
    <div class="col-sm-3">
       <?php
            $atribut_kota = 'class="form-control dropKota"';
            echo form_dropdown('Kota', $namaKota, $values->Kota, $atribut_kota);
            set_validation_icon('Kota');
        ?>
    </div>
    <?php if (form_error('Kota')) : ?>
        <div class="col-sm-9 col-sm-offset-3">
            <?php echo form_error('Kota', '<span class="help-block">', '</span>');?>
        </div>
    <?php endif ?>

    <script>
        $(document).ready(function () {
            $(".dropProv").on("change", function(){
                var idProv = $(this).val();
                var baseUrl = '<?php echo base_url(); ?>program/administrasi/registrasi/ajax_get_kota/'+idProv;
                var kota = [];
                $.ajax({
                    url: baseUrl,
                    data: kota,
                    success: function(datas){
                        $(".dropKota").select2({
                             placeholder: "Pilih Kota",
                             data: datas
                        });
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert("error");
                    }
                });
            });
        });
    </script>
</div>

我在这里要做的是如何传递我从 ajax 获得的数据:

[{"id_kab":"5103","nama":"KAB.BADUNG"},{"id_kab":"5106","nama":"KAB.BANGLI"},{"id_kab":" 5108","nama":"KAB.BULELENG"},{"id_kab":"5104","nama":"KAB.GIANYAR"},{"id_kab":"5101","nama":"KAB. JEMBRANA"},{"id_kab":"5107","nama":"KAB. KARANGASEM"},{"id_kab":"5105","nama":"KAB. KLUNGKUNG"},{"id_kab":" 5102","nama":"KAB.TABANAN"},{"id_kab":"5171","nama":"KOTA DENPASAR"}]

进入下拉菜单dropKota。这些数据是在另一个下拉值更改时动态生成的。

当前结果:

select2 需要特定的格式,这样才能在下拉菜单中正确显示

var data = [{ id: 0, text: 'enhancement' } //类似这样的

我该怎么做?

【问题讨论】:

  • 你必须像这样映射数组: $data = ArrayHelper::map(Clients::find()->asArray()->all(), 'cid', function($model , $defaultValue) { return $model['cid'] . " - " . $model['first_name'] . " " . $model['middle_name'] . " " . $model['last_name']; } ) ;

标签: javascript php ajax codeigniter jquery-select2


【解决方案1】:

你必须这样做:

 $.ajax({
                url: url,
                type: "POST",
                async: false,
                data: {id: id},
                success: function(data) {
                    var data_array = $.parseJSON(data);
                    $.each(data_array.emp, function(key, value) {
                        $('#Your_drop_down_id').append($('<option>', {
                            value: key,
                            text: value,
                        }));
                    });

                }
            });

你必须解析数据(JSON 到数组),然后使用 $.each 循环所有值。

【讨论】:

  • 我更新了我的问题,如何将数组数据格式化为 select2 特定格式?谢谢你的帮助
【解决方案2】:

试试这个:

success: function(datas){
    var data = JSON.parse(datas);

    var options = '<select name="dd_name"><option>Select</option>';
    for(i=0; i<data.length; i++)
    {
        options += '<option value="'+ data.col_name +'">'+ data.col_id +'</option>';
    }
    options += '</select>';

    $('#div_id').html(options);   // where #div_id is the id of a div in which this drop down is required.
},

【讨论】:

  • 这个只提供选项选择,谢谢回复
  • 我更新了我的代码,查看当前结果,我将select2 JS移动到ajax成功函数中,下拉菜单可以加载数据但它搞砸了
【解决方案3】:

如下更改$.ajax调用

$.ajax({
    url: baseUrl,
    data: kota,
    dataType: "JSON",
    success: function(datas){
        var s= document.getElementById('<Element Id>');
        s.eampty();
        $.each(datas, function(index, el) {
            s.options[index]= new Option(index, el);
        });
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert("error");
    }
});

dataType: "JSON", 将以json 格式响应ajax 调用的输出。 将 &lt;Element Id&gt; 替换为要添加数据的元素 ID。

完整来源

<div class="form-group form-group-sm has-feedback <?php set_validation_style('Kota')?>">        
    <?php echo form_label('Kota / Kabupaten', 'kota', array('class' => 'control-label col-sm-2')) ?>
    <div class="col-sm-3">
       <?php
            $atribut_kota = 'class="form-control dropKota"';
            echo form_dropdown('Kota', $namaKota, $values->Kota, $atribut_kota);
            set_validation_icon('Kota');
        ?>
    </div>
    <?php if (form_error('Kota')) : ?>
        <div class="col-sm-9 col-sm-offset-3">
            <?php echo form_error('Kota', '<span class="help-block">', '</span>');?>
        </div>
    <?php endif ?>

    <script>
        $(document).ready(function () {
            $(".dropKota").select2({
                placeholder: "Pilih Kota"
            });
            $(".dropProv").on("change", function(){
                var idProv = $(this).val();
                var baseUrl = '<?php echo base_url(); ?>program/administrasi/registrasi/ajax_get_kota/'+idProv;
                var kota = [];
                $.ajax({
                    url: baseUrl,
                    data: kota,
                    dataType: "JSON",
                    success: function(datas){
                        var s= document.getElementById('<Element Id>');
                        s.eampty();
                        $.each(datas, function(index, el) {
                            s.options[index]= new Option(index, el);
                        });
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert("error");
                    }
                });
            });
        });
    </script>
</div>

【讨论】:

    【解决方案4】:

    终于在四处询问后找到了解决方案,所以这是解决方案:

    JS 和 select2 脚本

    <script>
            $(document).ready(function () {
                $(".dropProv").on("change", function(){
                    var idProv = $(this).val();
                    var baseUrl = '<?php echo base_url(); ?>program/administrasi/registrasi/ajax_get_kota/'+idProv;
                    var kota = [];
                    $.ajax({
                        url: baseUrl,
                        dataType: 'json',
                        success: function(datas){
                            //since select2 need a specific format u need to do this
                            var kota = $.map(datas, function (obj) {
                                obj.id = obj.id || obj.id_kab; // replace id_kab with your identifier
                                obj.text = obj.text || obj.nama // replace nama with your identifier
                                return obj;
                            });
                            $(".dropKota").select2({ //change dropKota into your element
                                placeholder: "Pilih Kota",
                                data: kota
                            });
                        },
                        error: function (xhr, ajaxOptions, thrownError) {
                            alert("error");
                        }
                    });
                });
            });
        </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2014-05-23
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多