因此,我创建了一个表,其中一列是一个名为“arrived”的复选框,这意味着如果客户机到达,我将选中该复选框,它将用当前时间更新我的数据库(mysql)。我知道我必须使用jquery向coldfusion发出ajax请求并更新数据库,但我不知道如何做到这一点。有人能给我举个小例子说明怎么做吗?谢谢你,hg
更新
所以我一直在做我的项目的一些东西,我发现了一个问题。
这是我的javascript代码:
$(document).ready(function() {
$(".predicted").on("change",function(event){
var hora = this.value;
console.log("Updating time = "+ hora);
var id = jQuery('input[type=hidden][name=id]').val();;
console.log(id);
$.ajax({
url: "horaPrevista-update-database.cfc"
, type: "POST"
, dataType: "json"
, data: {"method" : "updatePredicted", "returnFormat": "json", "hora": hora, "id": id}
}).done(function(response) {
console.log("response", response);
}).fail(function(jqXHR, textStatus, errorMessage) {
console.log("errorMessage",errorMessage);
});
window.location.reload(true);
});
});
这是my hc-update-database.cfm:
<cfcomponent>
<cfset variables.dsn = "listareservas">
<cffunction name="updatePredicted" returntype="struct" access="remote">
<cfargument name="hora" type="string" required="true">
<cfargument name="id" type="numeric" required="true">
<cfset local.response = {success=true}>
<cftry>
<cfquery datasource="#variables.dsn#">
UPDATE Reservas
SET ReservaTempoPrevisto = <cfqueryparam cfsqltype="cf_sql_timestamp" value="#arguments.hora#">
WHERE ReservaID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.id#">
</cfquery>
<cfcatch>
<!--- add handling here... --->
<cfset local.response = {success=false}>
</cfcatch>
</cftry>
<cfreturn local.response>
</cffunction>
我有一个由查询填充的表。
<cfoutput query="getReservations">
<tbody>
<tr>
<td><input class="form-control predicted" name="predicted" id="ReservaHoraPrevisto" placeholder="HH:MM" value="#timeFormat(ReservaTempoPrevisto,'HH:mm')#">
<input type="hidden" name="id" class="id" value="#ReservaID#"></td>
</tr>
</tbody>
例如,如果我的查询getreservations有10条记录,它将显示10个输入。问题是,如果我尝试更改输入,它总是在数据库中更新表中显示的第一条记录(它总是将第一条记录值ţreservaidţ发送到hc update database.cfm)。如何将这两个值发送到cfc(输入和id)?
2条答案
按热度按时间oknwwptz1#
尝试以下操作:
表单模板:
表单模板.cfm
ajax模板:
ajax-update-database.cfm
v64noz0r2#
无论我选中哪个复选框,它总是更新数据库中出现在表中的第一条记录
这是因为演示示例设计时考虑了一条记录。如果表单实际上处理多个记录,则需要修改js和cf代码。
因为您只将id传递给cf,所以不需要单独的隐藏字段。只需使用“reservaid”作为复选框值。当复选框状态更改时,使用“更改”事件更新记录。下面的示例在选中一个框时更新记录。请记住,用户可以取消选中一个框-或重新检查它。您需要决定如何在数据库端处理这些事件,并相应地修改代码。取消选中时是否要清除到达日期?如果重新检查,用当前日期和时间更新记录,等等。。。?
注意,我的首选是对ajax调用使用cfc。js代码很相似,只是不同的url和数据参数
在cf端,创建一个接受单个数字id的远程函数。