在Ajax Post Coldfusion之后显示来自cfc的警报



我想在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: ", status, 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>

控制台日志("成功"(成功地显示在我的浏览器中,但我的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标头,即当请求的文件(CGI.SCRIPT_NAME(是当前文件时。

这样你就可以使用相同的功能

  • 通过Ajax 从客户端远程

    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: ', status, statusText);
    }
    });
    };
    post("999", "133");
    

    这导致布尔值

  • 并直接从其他ColdFusion代码

    <cfset thatComponent = CreateObject("component", "YourCfcName")>
    <cfset result = thatComponent.save("999", "133")>`
    

    导致布尔值。

最新更新