我正在尝试学习如何使用ColdFusion,jQuery和AJAX完成相当简单的任务,但遇到了一个我无法弄清楚的问题。
对于这个概念验证,我创建了简单的假数据。数据库中的表只包含3个字段(ID,名称和评级)。在“主”页面上,我将这些数据显示在一个表中,其中“rating”是一个下拉输入。我正在尝试使用AJAX在用户更改值时更新“评级”。
就jQuery方面而言,我有两个变量分配给“已更改”ID及其新评级。我在“更改”功能中有以下代码(它本身工作正常):
$.post('update.cfc', {ID: inputID, rating: selRat})
<cfcomponent>
<cffunction name="updateRating" access="remote" output="false">
<cfquery datasource="#session.db#" name="update">
UPDATE ajaxTest
SET rating = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.rating#">
WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.ID#">
</cfquery>
</cffunction>
</cfcomponent>
当我转到页面并更改值时,我在控制台中收到以下错误(虽然路径没有意义,但它指向正确的位置):
这很可能很简单,但我似乎无法弄明白。
答案 0 :(得分:3)
您应该通过jQuery发布到update.cfc?method=updateRating
。
然后在您的函数中添加ID
和rating
作为<cfargument>
,并引用您的变量,就像它们位于ARGUMENTS
范围内,而不是FORM
。
答案 1 :(得分:0)
尝试将其包装在这样的cftry中。这将返回EID为0,如果一切都通过,或者EID为1,如果有错误,它也将返回错误。
根据你之前关于这个cfc的问题,我记得我建议将它放在一个带有自己的application.cfc的隔离文件夹中(以便于测试)。如果你这样做,那么它可能是session.db绊倒你,因为它可能没有被定义。无论如何,这段代码应该清楚地定义错误。
<cfcomponent>
<cffunction name="updateRating" returntype="struct" access="remote" output="false" returnformat="json">
<cfset local.restruct = structnew()>
<cfset local.restruct.eid = 0>
<cftry>
<cfquery datasource="#session.db#" name="update">
UPDATE ajaxTest
SET rating = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.rating#">
WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.ID#">
</cfquery>
<cfcatch>
<cfset local.restruct = cfcatch>
<cfset local.restruct.eid = 1>
</cfcatch>
</cftry>
<cfreturn local.restruct>
<!--- If eid returns 0, everything is fine, if it returns 1, error data is returned with it --->
</cffunction>
</cfcomponent>
并且,用javascript粗略地调用它。目前,这将返回基本的Alerts()和console.log(),但您可以使它做任何你喜欢的事情。它也没有实际传递变量的现状,只是平面数据
$("#formname").submit(function(e) {
var postData = $(this).serializeArray();
var formURL = "/enter/path/to/file.cfc?method=updateRating";
$.ajax(
{
url : formURL,
type: "POST",
data : {ID: 1, rating: 3},
success:function(data, textStatus, jqXHR)
{
var pObj = data;
if (pObj.EID == 1) {
for(key in pObj) {
if (pObj[key].length) {
alert(key + ": " + pObj[key]);
console.log(key + ": " + pObj[key]);
}
}
} else {
alert("success");
}
},
error: function(jqXHR, textStatus, errorThrown)
{
//if fails
}
});
e.preventDefault(); //STOP default action
// e.unbind(); //unbind. to stop multiple form submit.
});