Home > OS >  how to return count_all_results to ajax success function in codeiginter
how to return count_all_results to ajax success function in codeiginter

Time:06-03

i was try get count of records and return result number to ajax success function to print it or get the value on the textbox

the controller function is

public function get_subaccount_count($id){ 
        $data = $this->accounts_model->get_count($id);
        echo json_encode($data);
    }

and the modle function

    public function get_count($id){
        $sql="SELECT COUNT(*) FROM $this->tablename";
        $this->db->where('node_parent',$id);
        return $this->db->count_all_results($this->tablename);  
    }

and the javascript in view is

<script>
    $('#sub_account').change(function(){
      var accountcode = document.getElementById("main_code").value;
      var subaccount = document.getElementById("sub_account").value;
      //-------- loop to get count of sub accounts and add sum  1 ------------
      $.ajax({
            type: 'GET',
            url: "<?php echo base_url();?>index.php/accounts/get_subaccount_count/" $('#main_code').val(),
            data: {},
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
              $('#account_code').empty();
              $.each(result.result, function(){ 
                $('#account_code').value = this[0];
                })}
            
        });
      //-------- loop to get count of sub accounts and add sum  1 ------------
      });
      
           
</script>
 

i want the $('#account_code').value = is the count result

CodePudding user response:

Your controller only needs to call the model method and print the returned integer.

public function get_subaccount_count(int $id): void
{ 
    echo $this->accounts_model->get_count($id);
}

Your model doesn't benefit from the $sql declaration.

public function get_count(int $id): int
{
    return $this->db->where('node_parent',$id)->count_all_results($this->tablename);  
}

Your ajax block only needs to assign the printed value to the desired HTML element.

$.ajax({
    type: 'GET',
    url: "<?php echo base_url();?>index.php/accounts/get_subaccount_count/"   $('#main_code').val(),
    success: function (response) {
        $('#account_code').value = result;
    }
});

Or use $.get like this:

$.get("<?php echo base_url();?>index.php/accounts/get_subaccount_count/"   $('#main_code').val(), function(result) {
    $('#account_code').value = result;
});

CodePudding user response:

Change like this:

$.ajax({
            type: 'GET',
            url: "<?php echo base_url();?>index.php/accounts/get_subaccount_count/" $('#main_code').val(),
            data: {},
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
              $('#account_code').empty();
              var counter = 0; // this line
              $.each(result.result, function(){ 
                counter  ; //this line
                })}
              $('#account_code').value = counter; // and this line
            
        });
  • Related