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で、returnを使用するのではなく、ヘッダーを使用して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

URL:

getAllExpense逆に読むと、関数名でありexpenses、コントローラー名であることがわかります...何/public/ですか?

データ:

現在、を使用していますdata :'date='+date。これは正しくありません。$.ajaxパラメータとしてオブジェクトを期待しdataます。を使用しdata: {date: date}ます。

dataTypeはどこにありますか?

サーバーからのjsonを期待している場合は$.ajax、応答を適切に解析できるようにこれを伝えます。使用する:dataType: 'json'

あなたの成功機能

console.log()返されたデータを呼び出すためのデバッグに役立ちます。コールバックの使用の内部:console.log(data);次に、Webツールを開きます。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そして、URLバーで直接呼び出します。生のjsonを確認し、満足のいく形式であるかどうかを判断できます。

于 2012-10-02T16:57:09.950 に答える