【问题标题】:JQuery DataTables - Refresh Table Data After Post - ColdFusionJQuery DataTables - 发布后刷新表数据 - ColdFusion
【发布时间】:2014-04-09 18:13:48
【问题描述】:

我发布了一个非常简单的示例来说明我想要做什么,因为这样更容易解释。

  1. 我有一个用 cfquery 填充的数据表。
  2. 当您双击表格行时,JQuery 脚本会将 RecordID 作为 url 变量发送到操作页面。
  3. 操作页面获取 url 变量并将其传递到删除查询中,该查询从填充页面上的表的 SQL 表中删除。
  4. 如果您刷新/重新加载 cfm 页面,查询会再次运行并且表会更新,减去刚刚删除的行。

所以,这是我的问题。我希望双击时自动更新此表,而无需重新加载页面。我意识到这不是为此设置正确的方法,但我需要建议。只是告诉我“你需要一个 ajax 响应”并没有多大帮助。我需要例子或更好的解释。我已经阅读了好几天,但我无法弄清楚服务器端处理并获得 json 或 ajax 响应。我需要帮助。

从使用这个简单的数据开始...

CREATE TABLE [dbo].[TEST]([RecordID] [int] NULL,[Name] [varchar](25) NULL)

Insert into TEST (RecordID, Name)
Values ('1','Mike')

Insert into TEST (RecordID, Name)
Values ('2','Bill')

Insert into TEST (RecordID, Name)
Values ('3','Joe')

接下来,这里是cfm页面...

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="../JQuery/js/datatables/DataTables-1.9.4/media/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/smoothness/jquery-ui.min.css"/>
<link rel="stylesheet" type="text/css" href="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables_themeroller.css"/>


<script>
    $(document).ready(function() {
        var table1 = $("#table1").dataTable({bJQueryUI:true});

        //when you double click a row in this table it will grab the RecordID
        $("#table1 tr").dblclick(function() {
            var RecordID = $(this).find("#RecordID").text();

            //If the RecordID is defined, show it in an alert, then send back to the action page where it uses the URL variable in a delete query.
            if(RecordID) {
                alert(RecordID);
                $.post('TESTACTION.cfm?RecordID='+ RecordID);       
            }
        });
    });
</script>

<!---This query populates the table--->
<cfquery name="Query1" datasource="x">
    Select RecordID, NAME
    From TEST
</cfquery>

    <form>
        <div id ="div1" class="dataTables_wrapper">
            <table id="table1" class="dataTable">
                <thead>
                        <tr>
                            <th>RecordID</th>
                            <th>Name</th>
                        </tr>
                </thead>
                <tbody>
                    <cfoutput query = "Query1">
                        <tr>
                            <td id="RecordID">#Query1.RecordID#</td>
                            <td>#Query1.NAME#</td>
                        </tr>
                    </cfoutput>
                </tbody>
            </table>
        </div>

    </form>

最后是 TESTACTION.cfm 页面...

<cfif isdefined("url.RecordID")>
    <cfquery name="x" datasource="x">
        Delete from TEST where RecordID = '#url.RecordID#'
    </cfquery>
</cfif>

【问题讨论】:

  • 听起来像是要刷新包含数据表的div。谷歌搜索“coldfusion refresh div”应该会给你一些东西。
  • 好的,我确实找到了一种方法,可以在发布后删除客户端的行。我可以在 $.post 行之后添加它...code........ var row = $(this).closest("tr").get(0); table1.fnDeleteRow(table1.fnGetPosition(row)); 但是,我认为这不是正确的方法。我知道我真的应该以某种方式使用 ajax 而不是发布到操作页面
  • 你写的删除行是我过去的做法。

标签: jquery coldfusion datatables


【解决方案1】:

id 添加到您的行并使用jquery postsuccess 函数删除该行。

CF 代码:

<cfoutput query = "Query1">
    <tr id="row_#Query1.RecordID#>
        <td id="RecordID">#Query1.RecordID#</td>
        <td>#Query1.NAME#</td>
    </tr>
</cfoutput>

jquery:

$.post('TESTACTION.cfm?RecordID='+ RecordID, function(){
    $("#row_" + RecordID).remove();
});

jquery .post documentation

从 cmets 编辑:

如果你使用fnDeleteRow,你应该可以通过row id来做到这一点:

$.post('TESTACTION.cfm?RecordID='+ RecordID, function(){
    //$("#row_" + RecordID).remove();
    table1.fnDeleteRow(table1.fnGetPosition($("#row_" + RecordID)));
});

【讨论】:

  • 是的,这行得通。谢谢你。我唯一担心的是我希望数据表始终显示填充它的查询结果,所以如果我发布更改,操作页面会删除一条记录,我希望数据表显示查询的当前结果(与我重新加载页面会发生的情况相同)但没有仅删除表中行的屏幕显示的代码。这样做的原因是因为我将对另一个由查询填充的表执行相同的操作,该查询将显示新添加的数据而不是删除已删除的数据。
  • 从我读过的内容来看,我相信这需要是对另一个页面的 ajax 调用,该页面在数组中显示数据。刷新的是那个数组。我很难弄清楚如何做到这一点。
  • 刚刚注意到 .remove() 不适用于数据表,因为它不会更新计数。使用 fnDeleteRow 可以做到这一点。
  • @user3516014 当然可以。更新了我的答案。
  • 这适用于发布的问题,所以我认为这是一个完整的答案。谢谢。我将不得不发布另一个关于 Ajax 方法的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多