0

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

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中加载视图的方式发送数据,因为我已经在函数索引中加载了它。有人可以帮我吗?

4

2 回答 2

3

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

改变这个:

return json_encode($allExpenses);

至:

$this->output->set_header('Content-Type: application/json; charset=utf-8');
echo json_encode($allExpenses);
于 2012-10-02T14:34:02.240 回答
1

网址:

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

数据:

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

数据类型在哪里?

如果您期望来自服务器的 json,请告诉$.ajax它,以便它可以正确解析响应。利用:dataType: 'json'

你的成功功能

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

“最后是表格:”

你没有填写表格。

隔离问题:

正如我所提到的,您最好使用 Chrome 的“网络”选项卡检查 AJAX 响应,但您也可以通过暂时将您的功能更改为:

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 并确定它是否采用您满意的格式。

于 2012-10-02T16:57:09.950 回答