javascript - 如何使用javascript对json类型数据进行排序?

标签 javascript php jquery codeigniter sorting

我有 3 个下拉菜单,其中包含我想要按升序排序的地点列表。第一个地点下拉列表使用 codeigniter active record order_by 函数进行排序,并且地点已成功按升序排序。但是,使用 onchange javascript 函数,当我在第一个下拉列表然后填充第二个位置下拉列表,不包括我在第一个下拉列表中选择的位置,返回的位置没有按升序排序,即使我的查询中有 order_by 函数。我怀疑这是因为onchange中返回的json格式数据所致。这是我的代码。感谢您的帮助。

此代码按升序对数据进行正确排序

function get_dropdown_barangay(){

  $query = $this->db->select('ID,brgy_name')
                    ->from('tbl_barangay')
                    ->order_by('brgy_name','asc')
                    ->get()
                    ->result_array();
  $dropdown = array('0'=>'Select Barangay');
  foreach($query as $value){
    $dropdown[$value['ID']] = $value['brgy_name'];
  }

  return $dropdown;

}

输出图像: enter image description here

更改代码时,返回的地点不按升序排序

$('#brgy_id_1').change(function(){

    var brgy_id = $("#brgy_id_1").val();
    alert(brgy_id);
    var data_val = {'brgy_id':brgy_id};

    $.ajax({
         type: "POST",
         url:"<?php echo base_url();?>admin/get_barangay_list",
         data:data_val,
         dataType:'json',
         success: function(data)
          {
           $('#brgy_id_2').empty();
           $.each(data,function(id,val)
           {
                var opt = $('<option />'); // here we're creating a new select option for each group
                  opt.val(id);
                  opt.text(val);
                  $('#brgy_id_2').append(opt);
            });
           }
     });

 }); //end change

admin.php

function get_barangay_list(){

      if(isset($_POST['brgy_id2'])){
        $brgy_array_id = array('0'=>$_POST['brgy_id'],'1'=>$_POST['brgy_id2']);
      } else{
        $brgy_array_id = array('0'=>$_POST['brgy_id']);
      }

      $result=$this->core_model->get_barangay_list($brgy_array_id);
      $this->output->set_header('Content-Type: application/json',true);
      echo json_encode($result);
    }

模型.php

function get_barangay_list($brgy_array_id){

  $query = $this->db->select('ID,brgy_name')
                    ->from('tbl_barangay')
                    ->where_not_in('ID',$brgy_array_id)
                    ->order_by('brgy_name','asc')
                    ->get()
                    ->result_array();
  $dropdown = array('0'=>'Select Barangay');
  foreach($query as $value){
    $dropdown[$value['ID']] = $value['brgy_name'];
  }

  return $dropdown;

}

显示数据未按升序排序的输出图像

enter image description here

最佳答案

实现 kinghfb 评论的一种方法:

在服务器端:构建一个数组

$dropdown = array();
$dropdown[] = array('id' => 0, 'label' => 'Select city');
for ($query as $value) {
    $dropdown[] = array('id' => $value['ID'], 'label' => $value['brgy_name']);
}

在客户端(javascript):更改循环代码:

$.each(data,function(id,val) {
    var opt = $('<option />'); // here we're creating a new select option for each group
    opt.val(val.id);
    opt.text(val.label);
    $('#brgy_id_2').append(opt);
});

关于javascript - 如何使用javascript对json类型数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397494/

相关文章:

jquery - 使用 jQuery AJAX 通过 Web 服务从数据库中获取数据

javascript - 如何在 bootstrap multiselect(Knockout 绑定(bind))中实现 optgroups

javascript - HighCharts - JQuery - 简单示例不起作用

javascript - Cookie欺骗到没有点前缀的域

php - Javascript - 不确定我的 AJAX 是否正确,没有错误,但没有数据库条目

PHP - 使用 mysqli 获取单个结果

php - 仅在 IE11 中不设置 session Cookie

javascript - 在 jQuery 中用 TAB 键代码替换 Enter 键代码

javascript - 一种形式具有两种不同功能的按钮

使用jquery的ajax将php转换为js数组