问题描述
我想在ajax发布发送成功后显示来自我的CFC功能的警报, 有人可以帮助我吗?
这是我的代码:
function post(){
$.ajax({
type: "POST",URL: "myCFCName.cfc?method=save",data: { data1: data1,data2: data2 },success: function (message) {
alert("success"); //it show or work fine
}
error: function (jqXhr,status,statusText) {
alert("Ajax call Failed: ",statusText);
});
}
post("999","133");
<!-- Coldfusion Function -->
<cffunction name="save" access="remote" returntype="JSON">
<cfargument name="data1" type="numeric" required="yes">
<cfargument name="data2" type="numeric" required="yes">
<cfquery datasource="mydatabase" name="QuerySelect">
SELECT * FROM TABLE
WHERE column1 = <cfqueryparam value="#data1#" cfsqltype="CF_sql_INTEGER">
AND column2 = <cfqueryparam value="#data2#" cfsqltype="CF_sql_INTEGER">
</cfquery>
<cfif QuerySelect.recordcount GT 0>
<cfoutput>
<script type="text/javascript">
alert("data exist") //not show
</script>
</cfoutput>
<cfelse>
<cfoutput>
<script type="text/javascript">
alert("no record found") //not show
</script>
</cfoutput>
</cfif>
</cffunction>
console.log(“ success”)已成功显示在我的浏览器中, 但我的CFC功能警报功能未显示
解决方法
您的ColdFusion代码没有任何意义。
您不能“返回JavaScript,然后客户端以某种方式执行它” ,这不是Ajax的工作方式。您需要以适当的格式(例如JSON)返回数据,然后您的客户端代码将处理该数据。
此外,returntype="JSON"
是错误的。当您在浏览器控制台上查看“网络”选项卡时,您会看到从Ajax调用中收到错误500(“从保存函数返回的值不是JSON类型” )。如果使用returntype
,则该函数必须<cfreturn>
属于该数据类型的值。对于returntype="string"
,该函数必须返回一个字符串,对于returntype="numeric"
,该函数必须返回一个数字,依此类推。您的函数根本不返回任何东西。
最重要的是,JSON
不是ColdFusion中的数据类型(除非您定义了自己的JSON.cfc,我对此表示怀疑)。因此returntype="JSON"
将永远无法工作,尤其是它不会神奇地使函数的输出兼容JSON。您可能是说returnformat
。
也许您想返回一个true
/ false
值。
<cffunction name="save" returntype="boolean" returnformat="JSON" access="remote">
<cfargument name="data1" type="numeric" required="yes">
<cfargument name="data2" type="numeric" required="yes">
<cfquery datasource="mydatabase" name="QuerySelect">
SELECT *
FROM MyTable
WHERE Column1 = <cfqueryparam value="#data1#" cfsqltype="CF_SQL_INTEGER">
AND Column2 = <cfqueryparam value="#data2#" cfsqltype="CF_SQL_INTEGER">
</cfquery>
<cfif ExpandPath(CGI.SCRIPT_NAME) eq GetCurrentTemplatePath()>
<cfheader name="Content-Type" value="application/json; charset=utf-8">
</cfif>
<cfreturn QuerySelect.RecordCount gt 0>
</cffunction>
此函数以JSON格式(而不是WDDX格式,这是ColdFusion的默认格式)返回布尔值,此外,它为Ajax调用正确设置了Content-Type
头,即当请求的文件({{1 }})是当前文件。
这样,您可以使用相同的功能
-
通过Ajax从客户端远程访问
CGI.SCRIPT_NAME
这会产生布尔值
-
,直接来自其他ColdFusion代码
function post(data1,data2){ return $.ajax({ type: "POST",url: "YourCfcName.cfc?method=save",data: { data1: data1,data2: data2 },success: function (data) { console.log('server returned: ',data); },error: function (jqXhr,status,statusText) { console.log('Ajax call failed: ',statusText); } }); }; post("999","133");
其中也会产生布尔值。