0

我有一个控制器,它在模型中发送两个函数的结果,如下所示:

$data['waiting'] = $this -> queue_model -> waiting();
$data['beingseen'] = $this -> queue_model -> beingseen();
$this -> load -> view('studentqueue/studentqueue', $data);

在我看来,我有一个显示数据的 jquery 网格。当有一条新数据插入数据库时​​,我的老板需要该表自动更新日期,在这种情况下会影响查询结果。

我正在尝试遵循本教程

但我对数据到底是什么感到困惑。

在我发送 $data 的控制器中,它如何与 ajax 调用中的数据集成?

我在同一页面上有两个数据网格,它们都需要异步更新。

因此,只是为了绝对清楚问题是什么:

如何将我传递给视图的控制器数据集成到 ajax 调用中,以便更新我的表。-- 我有两个表,它们都有相同的类 id,但如果你愿意,可以使用不同的表 id。

我的表格的 html 是:

<?php echo anchor('staff_controller/index', 'Return');?>
    <p class='error'>
        <font color="#ff0000">
            <?php echo $this->session->flashdata('reports');?>
        </font>
    </p>

    <h3>Students Waiting</h3>
            <table id='waiting' class='display'>
                <thead>
                <tr>
                    <th>ID</th>                       
                    <th>A Number</th>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Time Waiting</th>
                    <th>Reason for visit</th>
                    <th>Comments</th>
                    <th>Aid Year</th>
                    <th>Staff Comments</th>
                    <th>Options</th>
                </tr>
            </thead>
            <tbody>

                <?php $options = array("" => "", 'start' => 'Start Session', 'stop' => 'Student Not Present', 'abandon' => 'End Session', );
                foreach ($waiting as $row) 
                { 
                    ?>                
                <tr>
                    <td><?php echo htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8'); ?></td>               
                    <td><?php echo anchor('studentqueue_controller/history/'.urlencode($row['anum']). '', htmlspecialchars($row['anum'], ENT_QUOTES, 'UTF-8'), 'target="_blank"'); ?></td>
                    <td><?php echo htmlspecialchars($row['first'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row['last'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row['SECOND'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row['reason'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row['studentcomments'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row['aidyear'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row['counselorcomments'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td>
                        <?php echo form_open('studentqueue_controller/counselorscreen/' .urlencode($row['id']). ''); ?>
                        <?php echo form_dropdown('options', $options, ""); ?>
                        <?php echo form_submit('submit', 'Submit'); ?>
                        <?php echo form_close(); ?>
                    </td>
                </tr>
                <?php
                 } ?>
            </tbody>    
        </table>

被看见的学生

        <table id='beingseen' class='display'>
            <thead>
                <tr>
                    <th>ID</th>                       
                    <th>A Number</th>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Sign In Time</th>
                    <th>Staff Member</th>
                    <th>Start Time</th>
                    <th>Options</th>
                </tr>
            </thead>
            <tbody>
                <?php $options1 = array("" => "", 'continue' => 'Continue Session', 'terminate' => 'Terminate Session', );
                foreach ($beingseen as $row1) { ?>                 
                <tr>
                    <td><?php echo htmlspecialchars($row1['id'], ENT_QUOTES, 'UTF-8'); ?></td>              
                    <td><?php echo htmlspecialchars($row1['anum'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row1['first'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row1['last'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row1['signintime'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row1['fname'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td><?php echo htmlspecialchars($row1['starttime'], ENT_QUOTES, 'UTF-8'); ?></td>
                    <td>
                        <?php echo form_open('studentqueue_controller/counselorscreen/' .urlencode($row1['id']). ''); ?>
                        <?php echo form_dropdown('options', $options1, ""); ?>
                        <?php echo form_submit('submit', 'Submit'); ?>
                        <?php echo form_close(); ?>
                    </td>
                </tr>
                <?php } ?>
            </tbody>    
        </table>
4

3 回答 3

2

这是我的做法:

  1. 页面加载请求加载视图的 CI 控制器

  2. View 包含将保存从 ajax 请求返回的数据的数据表(我们为此使用了很棒的 DataTables 插件/扩展)

  3. 我的控制器中有一个单独的方法来处理对数据的 ajax 请求(get_table_data_xhr())......这个方法不加载视图,它只是回显 Datatables 将用来填充表的 JSON 对象。对该方法的请求是在页面加载后发出的,然后在任何触发器上再次刷新数据。

以下是 DataTables 文档的链接:http ://www.datatables.net/ 以下是使用此方法和 Ajax 请求作为数据源的示例:http ://www.datatables.net/release-datatables/示例/data_sources/ajax.html

更新:

这是我的一个 ajax 方法的片段,显示了它为 DataTables 插件返回 json 的内容/方式:

            ... // this is happening inside a loop that's assigning things to $data

            $data[] = array(
                'name' => $c->Name,
                'description' => $c->Description,
                'topics' => explode(';', $c->Topic__c),
                'start_date' => $c->StartDate,
                'end_date' => $c->EndDate,
                'sort_date' => $start_time->format('YmdH'),
                'dates' => $event_dates,
                'time' => $event_time,
                'delivery_method' => $c->Delivery_Method__c,
                'level' => $c->Levels__c,
                'url' => $c->Sign_Up_URL__c,
                'location' => $c->Location__c,
                'timezone' => $timezone
            );
        }
        $out['status'] = 'success';
        $out['data'] = $data;
    } else {
        $out['status'] = 'success';
        $out['data'] = array();
    }
}
header('Content-Type: application/json');
echo json_encode(array('aaData' => $out['data']));
于 2013-03-15T13:25:15.363 回答
1

我终于完成了申请的这一部分。我没有使用我自己的“更新”类型,而是继续使用 DataTables 更新。

我只是按照这个文档,一切都很好(大部分)。

这对我帮助很大:

http://datatables.net/forums/discussion/14641/escaping-html-with-datatables

希望有人能从我的错误中吸取教训。

于 2013-04-02T13:30:04.343 回答
0

如果我理解正确,您正在查看此代码:

 url: 'http://kyleschaeffer.com/feed/',
 data: { postVar1: 'theValue1', postVar2: 'theValue2' },

想知道应该是什么数据?我认为您需要关注 URL 应该是什么。自从

  $data['waiting'] = $this -> queue_model -> waiting();
  $data['beingseen'] = $this -> queue_model -> beingseen();

可能在控制器内部更广泛的功能中。您需要创建一个函数,专门为新的更新请求返回这两条数据(例如:http://mydomain.com/mycontroller/myupdatefunction)。所以你想做一个 GET 请求,因为你没有发布数据,只是请求返回数据。也许这个例子会有所帮助。

于 2013-03-15T13:27:56.090 回答