DataTables选择数据库中的行更新日期

时间:2015-10-23 23:56:54

标签: jquery coldfusion

如何使用jquerys DataTables中的select方法更新数据库?我想弄清楚的是如何在DataTable上选择一行,并通过单击按钮更新数据库中的几个字段。单击该按钮时,我希望它在数据库的Date_Complete部分中提交今天的日期。如何更新这样的行?

var table = $('#processing').DataTable();
$('#processing tbody').on( 'click', 'tr', function () {
    var rowdata = table.row( this ).data();
console.log(rowdata);
} );

enter image description here rowdata.id = 5

我能够在JS中获取数组但是如何将其转换为获取正确行的id,然后在ColdFusion中更新该行的Date_Complete?

    <cffunction name="updateRecord" access="remote" returntype="void">
    <cfargument name="id" type="numeric" required="true">
     <cfset var completeBatch = ''> 
    <cfquery name="completeBatch">
        UPDATE dbo.Dealer_Track_Work 
        SET    Date_Complete = getDate()
        WHERE  ID = <cfqueryparam value="#arguments.id#" cfsqltype="cf_sql_integer">
    </cfquery>
</cffunction>

如何将ID从JS传递给CF函数?

更新了JS ,但AJAX仍未运行updateRecord: 接收&#34;在第1行的第1行找到无效的CFML构造。&#34;为了我的功能。

    $(document).ready(function () {

        var table = $('#processing').DataTable();

        // Decide if row from datatable is chosen or not to display Modal
        $('#CompleteIt').click(function(){
            var rowIndex = $('#selectedRow').val();

            if (rowIndex){
                console.log("Item ID: " + rowIndex);
            } else {
                console.log("No item id selected!");
                alert("Please select batch to be completed.");
                return false;
            }
        });

        // When row is selected from datatable assign item id to hidden "selectedRow" textbox
        $('#processing tbody').on( 'click', 'tr', function () {
            var rowdata = table.row( this ).data();
            console.log(rowdata);
            var selectedIndex = $('#selectedRow').val();

            if (selectedIndex == rowdata.id) {
                $('#selectedRow').val('');
            }
            else {
                $('#selectedRow').val(rowdata.id);
            }
        });

        // What happens when a user hits the "Accept" button on the dealer form
        $(".completed_accept").click(function(){
            var CompletedName = $("#CompletedName").val();
            if (!CompletedName){ 
                alert("Please select associate.");
                if ($.browser.Chrome) {
                    $('#CompletedName').click();
                } else {
                    $('#CompletedName').focus();
                }
                return false;
            } else {
                $('#AssociateCompleted').modal('hide');
            }
        });

        $('#employeeLoggedOut').on('submit', function (e) {
        e.preventDefault();
        //alert($(this).serialize());
        $.ajax({
            // the location of the CFC to run
            url: "proxy/Completed.cfm",
            // send a GET HTTP operation
            type: "post",
            // tell jQuery we're getting JSON back
            dataType: "json",
            // send the data to the CFC
             data: $('#selectedRow').serialize(),
            // this gets the data returned on success
            success: function (data) {
                console.log(data);
                window.location.reload();
            }, 
            // this runs if an error
            error: function (xhr, textStatus, errorThrown) {
                // show error
                console.log(errorThrown);
            }
        });
    });
});

如何调用函数来运行方法并将ID传递给参数?

如何让我的JS rowdata.id在CF函数中等于WHERE id =

WHERE id = <cfqueryparam value="#arguments.id#" cfsqltype="cf_sql_integer">

1 个答案:

答案 0 :(得分:1)

原始

JQuery DataTable用于在客户端网页中使用HTML ,而不是使用数据 bases (例如MySQL,PostgreSQL) ,等),往往是服务器端。

description - 我的重点 - :

  

DataTables是jQuery Javascript库的插件。它是一个   高度灵活的工具,基于进步的基础   增强功能,并将高级交互控件添加到任何 HTML   表

编辑1

  

出于某种原因,我:   $.get('dealerTracking.cfc?method=updateRecord&id=rowdata.id');   没有开火,它正在跳过这一步。

我认为你打电话的原因是&#34;跳过&#34;这里是您应该包含您要联系的服务器的主机名,但是您没有这样做只会让它跳过外观。每当我完成AJAX调用时,他们都会遵循这种模式:

$.get('https://hostname.domain/server-side-script-to-contact ...')

但您的代码缺少主机名信息,似乎不知道要联系。

此外,您的var CompletedName = $("#CompletedName").val();可能会受到怀疑,特别是因为您在else块中使用此内容,如果它进入if的正文,则可能会被完全跳过相反 - 这取决于你碰巧输入的内容,所以我不能告诉你。

编辑2

  

我想要做的就是点击按钮时使用js来调用cf函数来更新日期行,说明它现在已经完成了

这是使用AJAX的一小部分示例(现在没有服务器进行测试,但布局应该让您朝着正确的方向前进)。在这种情况下,JS代码使用AJAX向服务器页面发送请求,其中包含服务器将调用的脚本的一些参数。

[...]
<body>
    <button id="AjaxRequestButton" onclick="sendAjaxRequest();">Send AJAX Request</button>
    <br/><br/>
    <input id="ServerResponseBox" type="text" style="width: 50%;" readonly></button>
</body>

<script>
// sends HTTP request in the background when button is pressed
function sendAjaxRequest() {
    console.log("Sending AJAX request to server...");
    $.ajax({
        type    : "GET",                // type of request: GET HTTP request
        url     : "ajax_demo.pl",       // script to execute in our case
        data    : "action=add_msg&msg='my-message'", // arguments for server script; can be user inputs retrieved from widgets, etc.

        // anonymous function callback invoked when server response arrives
        success : function(json_data) {
            // process server response
            console.log("Received server response.");
            $("[id='ServerResponseBox']").val(json_data.message);   // notice we never refreshed entire page for this
            // alert("Server response is: " + json_data.message);
        },
        dataType: "json"    // client-side should expect JSON-type data for the callback above
    });
}
</script>
[...]

此页面有一个按钮,并确保将其onclick事件设置为调用稍后定义的JS函数sendAjaxRequest。该函数具有$.ajax({ ... })调用(JQuery提供了几种方法),它将参数作为请求的一部分发送。这是由以下两行专门完成的:

url     : "ajax_demo.pl",
data    : "action=add_msg&msg='my-message'"

url是您需要在服务器上调用的内容(即页面/脚本),data是您传递脚本使用的参数并确定要执行的操作。< / p>

服务器的骨架程序(抱歉,Perl就是我现在所拥有的,但它非常简单)看起来类似于这样的东西,你可以获得由客户端AJAX调用,做一些有趣的事情,然后返回某种响应。

#!/usr/bin/perl

use strict;
use warnings;

# CPAN modules
use CGI;
use JSON;

print "Content-type: text/html\n\n";

my %args = # parse request URL here to get arguments

if( defined( $args{action} ) ){
    if($args{action} eq "add_msg") {
        print add_message( $args{msg} );
    }
} else {
    print default_response();
}

sub add_message {
    # create database connection,
    # execute SQL query against database
    # return a message to let the client know how things went
    my $json = { message => "some message for client" };
    return encode_json($json);
}

sub default_response {
    my $json = { message => "The meaning of life is... 42? o.O" };
    return encode_json($json);
}

我希望这会让你走上正确的道路。