如何访问从控制器返回到ajax成功的数组

时间:2017-01-17 01:35:04

标签: jquery ajax

我有一个返回两个查询的模型。

这是它返回的模型的一部分

$debit_journal_query = $this->db->select('journal_id, date, account, debit, credit')
                                ->from('journal_trans')
                                ->where('journal_id', $debit_journal_id)
                                ->get();       

$credit_journal_query = $this->db->select('journal_id, date, account, debit, credit')
                                ->from('journal_trans')
                                ->where('journal_id', $credit_journal_id)
                                ->get();         

return array('debit' => $debit_journal_query, 'credit' => $credit_journal_query);

这是我的控制者。我使用json_encode

传递了$data
//This method adds a double journal entry to the journal table
public function doubleAddJournal() {
    //Get the values from post
    $date = $this->input->post('date');
    $amount = $this->input->post('amount');
    $debit = $this->input->post('debit');
    $credit = $this->input->post('credit');

    $user = $this->session->userdata('username');

    $data = $this->JournalModel->doubleAddJournal($date, $amount, $debit, $credit, $user);

    echo json_encode(array('data' => $data););
}

这是我的ajax电话

$.ajax({
    type: 'POST'
    , url: '<?php echo base_url('doubleAddJournal'); ?>'
    , data: { date: date
         , amount: amount
         , debit: debit
         , credit: credit
    }
    , dataType: 'json'
    , success: function(data) {
        $('#journalDoubleAdd').modal('close');

        $(data).each(function() {
            $('#journalLogs').append($('<tr id="'+ this.journal_id +'">'
                + '<td class="dateJournal">'+ this.date +'</td>'
                + '<td class="accountJournal">'+ this.account +'</td>'
                + '<td class="debitJournal">'+ parseFloat(this.debit).toFixed(2) +'</td>'
                + '<td class="creditJournald">'+ parseFloat(this.credit).toFixed(2) +'</td>'
                + '</tr>'));
            });
        }
    , error: function(errorw) {
            alert('error');
    }
});

但是我对$(data).each(function(){})内的所有值都未定义。我哪里弄错了?我知道你在访问一个查询时如何做到这一点。但是,当您传递多个查询结果时,如何做到这一点?感谢。

2 个答案:

答案 0 :(得分:2)

您使用<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.android.camera2basic.AutoFitTextureView android:id="@+id/texture" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_alignParentStart="true" /> <include layout="@layout/drawer_main" android:id="@+id/drawerInclude" /> <ImageView android:id="@+id/imageView" android:layout_width="200dp" android:layout_height="200dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@android:color/transparent" /> <FrameLayout android:id="@+id/control" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentTop="true"> <android.support.design.widget.FloatingActionButton android:id="@+id/fabCam" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:scaleType="center" app:srcCompat="@android:drawable/ic_menu_camera" app:backgroundTint="@color/control_background" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fabSwap" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:layout_margin="@dimen/fab_margin" android:scaleType="center" app:srcCompat="@drawable/ic_swap" app:backgroundTint="@color/control_background" /> </FrameLayout> </FrameLayout> 代替.each(),因此您将$.each()视为DOM选择器。而不是你应该使用:

data

检查两者的文档:

根据数组结构更新。您需要迭代第一维,然后在第二维之后迭代,所以:

$.each(data.data, function (key, value) {
    ('#journalLogs').append($('<tr id="'+ value.journal_id +'">'
       + '<td class="dateJournal">'+ value.date +'</td>'
       + '<td class="accountJournal">'+ value.account +'</td>'
       + '<td class="debitJournal">'+ parseFloat(value.debit).toFixed(2) +'</td>'
       + '<td class="creditJournald">'+ parseFloat(value.credit).toFixed(2) +'</td>'
       + '</tr>'));
});

答案 1 :(得分:2)

在php中使用json_encode($data);

在js中使用

$.each(data, function(i, v){
/* your dom manipulation code*/
});