最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - how to send json array from controller to view in CodeIgniter - Stack Overflow

programmeradmin1浏览0评论

I have a function in my controller:

function getAllExpense()
    { $date=$this->frenchToEnglish_date($this->input->post('date'));
      $id_user=$this->session->userdata('id_user');
      $where=array('date'=>$date, 'id_user'=>$id_user);
      $allExpenses=$this->expenses_model->get_all('depenses',$where);
      return json_encode($allExpenses);

    }

In the view, I need to do an ajax_call to getAllExpense, but I need also to retrieve the result returned by getAllExpense in case of success(and I can't do this). Here is my view

function searchExpense()
    {
      var date= $('#dateSearch').val();
      $.ajax({
                            type:'POST',
                            url : '<?php echo site_url()."/public/expenses/getAllExpense/"; ?>',
                            data :'date='+date,

                            success:function(data)
                            {          $('#searchExpense').toggle();


                            }

                    });     
    }

and finally the form :

<div id="searchExpense" class="toogle_form" style="display:none">
           <label><strong>Vos depenses :</strong></label>
           <?php
              if (isset($allExpenses) && ! empty($allExpenses))
                                            {
                          foreach ($allExpenses as $expense)
                                    {
                                      echo $expense['id_depense'] ;
                                      echo ' ';
                                      echo $expense['mentaire'];
                                      echo '</br>';
                                        }
                              }
                              else
                              {
                                echo 'Vous n\'avez pas eu de depenses pour cette date';
                              }
            ?>
       </div>

This does not show anything on the browser. I can't use the method of sending data by loading the view in getAllExpense because I already load it in the function index. Could anyone help me please?

I have a function in my controller:

function getAllExpense()
    { $date=$this->frenchToEnglish_date($this->input->post('date'));
      $id_user=$this->session->userdata('id_user');
      $where=array('date'=>$date, 'id_user'=>$id_user);
      $allExpenses=$this->expenses_model->get_all('depenses',$where);
      return json_encode($allExpenses);

    }

In the view, I need to do an ajax_call to getAllExpense, but I need also to retrieve the result returned by getAllExpense in case of success(and I can't do this). Here is my view

function searchExpense()
    {
      var date= $('#dateSearch').val();
      $.ajax({
                            type:'POST',
                            url : '<?php echo site_url()."/public/expenses/getAllExpense/"; ?>',
                            data :'date='+date,

                            success:function(data)
                            {          $('#searchExpense').toggle();


                            }

                    });     
    }

and finally the form :

<div id="searchExpense" class="toogle_form" style="display:none">
           <label><strong>Vos depenses :</strong></label>
           <?php
              if (isset($allExpenses) && ! empty($allExpenses))
                                            {
                          foreach ($allExpenses as $expense)
                                    {
                                      echo $expense['id_depense'] ;
                                      echo ' ';
                                      echo $expense['mentaire'];
                                      echo '</br>';
                                        }
                              }
                              else
                              {
                                echo 'Vous n\'avez pas eu de depenses pour cette date';
                              }
            ?>
       </div>

This does not show anything on the browser. I can't use the method of sending data by loading the view in getAllExpense because I already load it in the function index. Could anyone help me please?

Share Improve this question asked Oct 2, 2012 at 14:12 user1499220user1499220 4194 gold badges13 silver badges23 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 3

In your controller function getAllExpense, try echoing your json data with a header rather than using return:

Change this:

return json_encode($allExpenses);

to:

$this->output->set_header('Content-Type: application/json; charset=utf-8');
echo json_encode($allExpenses);

The url:

Reading it backwards I understand getAllExpense to be your function name and expenses to be your controller name... What is /public/?

The data:

Currently you're using data :'date='+date. This is incorrect. $.ajax expects an object as the data parameter. Use data: {date: date}.

Where's the dataType?

If you're expecting json from the server, tell $.ajax this so it can parse the response properly. Use: dataType: 'json'

Your success function

It helps for debugging to call console.log() on the returned data. Inside the callback use: console.log(data); Then, open up your web tools. If you're using Chrome press ctrl+shift+j and inspect the console tab when firing your AJAX request. If you head over to the network tab and click on the most recent request (at the bottom) you can view the HTTP response as well.

"and finally the form :"

You didn't include a form.

Isolate the problem:

You're much better off inspecting the AJAX response using Chrome's Network tab as I've mentioned, but you could also isolate the issue to a client one or server one by changing your function temporarily to:

function getAllExpense(){
    //$date=$this->frenchToEnglish_date($this->input->post('date'));
    $date = "12/21/2012"; /*or whatever your date format is.*/
    $id_user=$this->session->userdata('id_user');
    $where=array('date'=>$date, 'id_user'=>$id_user);
    $allExpenses=$this->expenses_model->get_all('depenses',$where);
    //return json_encode($allExpenses);
    echo json_encode($allExpenses);
}

And calling getAllExpense directly in the URL bar. You'll be able to see the raw json and determine if it's in a format you're happy with.

发布评论

评论列表(0)

  1. 暂无评论