php - I want to add dynamic depended drop down using Ajax but it's not working

one text

This code looks fine to me no error but when I change the top category it's not showing me sub cats. Is there any issue with my code?

I have search a lot but didn't find any solution for this.

My view:

      <label for="cats">Category</label>
                       <select name="cat" id="category"  class="form-control category" id="sel_city">
                        <?php foreach ($procat as $key => $row): ?>

                                <option value="<?php echo $row->id; ?>"><?php echo $row->cat_name; ?></option>
                            <?php endforeach ?>
                    </select>
                       <label for="cats">Sub Category</label>
                      <select class="form-control subcategory" id="subcategory"  name="subcategory" required>
        <option value="">Please Select Subcategory</option>

       </select>  <label for="cats">Category</label>
                       <select name="cat" id="category"  class="form-control category" id="sel_city">
                        <?php foreach ($procat as $key => $row): ?>

                                <option value="<?php echo $row->id; ?>"><?php echo $row->cat_name; ?></option>
                            <?php endforeach ?>
                    </select>
                       <label for="cats">Sub Category</label>
                      <select class="form-control subcategory" id="subcategory"  name="subcategory" required>
        <option value="">Please Select Subcategory</option>

       </select>  <label for="cats">Category</label>
                       <select name="cat" id="category"  class="form-control category" id="sel_city">
                        <?php foreach ($procat as $key => $row): ?>

                                <option value="<?php echo $row->id; ?>"><?php echo $row->cat_name; ?></option>
                            <?php endforeach ?>
                    </select>
                       <label for="cats">Sub Category</label>
                      <select class="form-control subcategory" id="subcategory"  name="subcategory" required>
        <option value="">Please Select Subcategory</option>

       </select>  <label for="cats">Category</label>
                       <select name="cat" id="category"  class="form-control category" id="sel_city">
                        <?php foreach ($procat as $key => $row): ?>

                                <option value="<?php echo $row->id; ?>"><?php echo $row->cat_name; ?></option>
                            <?php endforeach ?>
                    </select>
                       <label for="cats">Sub Category</label>
                      <select class="form-control subcategory" id="subcategory"  name="subcategory" required>
        <option value="">Please Select Subcategory</option>

       </select>  <label for="cats">Category</label>
                       <select name="cat" id="category"  class="form-control category" id="sel_city">
                        <?php foreach ($procat as $key => $row): ?>

                                <option value="<?php echo $row->id; ?>"><?php echo $row->cat_name; ?></option>
                            <?php endforeach ?>
                    </select>
                       <label for="cats">Sub Category</label>
                      <select class="form-control subcategory" id="subcategory"  name="subcategory" required>
        <option value="">Please Select Subcategory</option>

       </select>
       
       <link href="maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
    <script src="maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
    <script type="text/javascript">
      $(document).off('change','.category').on('change','.category',function(){
        var id = $("option:selected",this).val();
          $.ajax({
          url:"<?= site_url('Products/get_sub_category_acc_cat'); ?>",
          type:"post",
          data:{id:id},
          dataType:"json",
          success: function(data)
          {
            var html = '';
            for(x in data)
            {
              html +='<option value="'+data[x]['id']+'">'+data[x]['sub_cat']+'</option>';
            }

            $("#subcategory").html(html);
          }
        });
      });
    </script><link href="maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
    <script src="maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
    <script type="text/javascript">
      $(document).off('change','.category').on('change','.category',function(){
        var id = $("option:selected",this).val();
          $.ajax({
          url:"<?= site_url('Products/get_sub_category_acc_cat'); ?>",
          type:"post",
          data:{id:id},
          dataType:"json",
          success: function(data)
          {
            var html = '';
            for(x in data)
            {
              html +='<option value="'+data[x]['id']+'">'+data[x]['sub_cat']+'</option>';
            }

            $("#subcategory").html(html);
          }
        });
      });
    </script>

Controller code:

function get_sub_category_acc_cat()
      {
        
        $data = $this->Pro_model->get_sub_category_acc_cat();
        echo json_encode($data);
      }

And model code:

function get_sub_category_acc_cat()
  {
    $id = $this->input->post('id');
    $q = $this->db->get_where('subcat',['cat_id'=>$id]);
  
    if($q->num_rows()>0)
    {
      return $q->result();
    }
    else
    {
      return null;
    }
  }

Source