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

时间:2020-09-14 09:48:15

标签: json 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>

console.log(“ success”)已成功显示在我的浏览器中, 但我的CFC功能警报功能未显示

1 个答案:

答案 0 :(得分:2)

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

    其中会产生布尔值。

相关问题