如何从控制器发送json数组到CodeIgniter中的视图

时间:2012-10-02 14:12:34

标签: javascript json codeigniter

我的控制器中有一个功能:

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);

    }

在视图中,我需要对getAllExpense执行ajax_call,但是我还需要在成功的情况下检索getAllExpense返回的结果(我不能这样做)。这是我的观点

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();


                            }

                    });     
    }

最后是表格:

<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['commentaire'];
                                      echo '</br>';
                                        }
                              }
                              else
                              {
                                echo 'Vous n\'avez pas eu de depenses pour cette date';
                              }
            ?>
       </div>

这不会在浏览器上显示任何内容。 我不能通过在getAllExpense中加载视图来使用发送数据的方法,因为我已经将它加载到函数索引中。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

在你的控制器函数getAllExpense中,尝试使用标头而不是使用return来回显你的json数据:

改变这个:

return json_encode($allExpenses);

到:

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

答案 1 :(得分:1)

网址:

向后阅读我理解getAllExpense是您的函数名称,expenses是您的控制器名称......什么是/public/

数据:

目前您正在使用data :'date='+date。这是不正确的。 $.ajax期望一个对象为data参数。使用data: {date: date}

dataType在哪里?

如果你期望从服务器获取json,请告诉$.ajax这样它可以正确解析响应。使用:dataType: 'json'

您的成功功能

有助于调试在返回的数据上调用console.log()。在回调中使用:console.log(data);然后,打开您的网络工具。如果您正在使用Chrome,请按 ctrl + shift + j 并在触发AJAX请求时检查控制台选项卡。如果您转到网络选项卡并单击最近的请求(在底部),您也可以查看HTTP响应。

“最后形式:”

您没有添加表单。

隔离问题:

如我所述,您最好使用Chrome的网络标签查看AJAX响应,但您也可以通过暂时更改您的功能将问题隔离到客户端1或服务器1:

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);
}

直接在网址栏中调用getAllExpense。你将能够看到原始的json,并确定它是否是你满意的格式。