通过Json传递javascript数组给coldfusion CFC

Passing javascript array to coldfusion CFC via Json

本文关键字:coldfusion CFC 数组 javascript Json 传递 通过      更新时间:2023-09-26

我使用这个javascript来捕获flexigrid中选中的所有复选框,并尝试将这个行id数组发送到CFC

function removeCertidao(){
    var allVals = [];
    $("input[id='certidao']:checked").each(function() {
        allVals.push($(this).val());
    });
    if (allVals.length == 0) {
        alert('É necessário escolher ao menos uma certidão.');
        return false;
    } else {
        alert(allVals);
    }
    $.ajax({
        type: "post",
        url: "../../CFC/CRC.cfc",
        data: {
            method: "removeCertidaoCRC",
            numSeqCertidao: allVals,
        },
        dataType: "json",
        success: function(){
            alert('YES');
        },
        error: function(){
            alert('NO');
        }
    });             
 }

下面的氯氟化碳

<cffunction access="remote" name="removeCertidaoCRC" returntype="boolean">
    <cfargument name="numSeqCertidao" type="array" required="true">
<cftry>
    <cftransaction>
        <cfquery datasource="portalCompras">
        UPDATE CRC_CERTIDAO CC
           SET CC.ncdcrcstatus = 0
             WHERE CC.NCDCRCCERTIDAO in <cfqueryparam value="#numSeqCertidao#"
                                                          cfsqltype="cf_sql_integer"
                                                          list="yes">
    </cfquery>
        </cftransaction>
    <cftransaction action="commit" />
    <cfreturn 0>
    <cfcatch type="any">
        <cftransaction action="rollback" />
        <cfreturn #cfcatch.message#>
        </cfcatch>
</cftry>
</cffunction>

当我尝试运行这个函数时,我的服务器回答NUMSEQCERTIDAO参数传递给removeCertidaoCRC函数不是数组类型。

我最近刚加入了一个延迟的项目,我已经没有选择了。

jQuery将做一个很好的工作发送数组分离像numSeqCertidao[] = 'val1', numSeqCertidao[] = 'val2' ...,但ColdFusion处理这很糟糕,并没有采取这并重建它作为一个数组。

你的JavaScript不是发送JSON格式的数据,dataType选项是响应数据的格式。为了你的需要,我建议你把numSeqCertidao作为一个列表发送,给你的CFC方法的参数一个字符串类型,剩下的部分保持原样,应该工作得很好。

稍微修改代码:

function removeCertidao(){
    var allVals = [];
    $("input[id='certidao']:checked").each(function() {
        allVals.push($(this).val());
    });
    if (allVals.length == 0) {
        alert('É necessário escolher ao menos uma certidão.');
        return false;
    } else {
        alert(allVals);
    }
    $.ajax({
        type: "post",
        url: "../../CFC/CRC.cfc",
        data: {
            method: "removeCertidaoCRC",
            numSeqCertidao: allVals.join(),
        },
        dataType: "json",
        success: function(){
            alert('YES');
        },
        error: function(){
            alert('NO');
        }
    });             
 }
<cffunction access="remote" name="removeCertidaoCRC" returntype="boolean">
    <cfargument name="numSeqCertidao" type="string" required="true">
<cftry>
    <cftransaction>
        <cfquery datasource="portalCompras">
        UPDATE CRC_CERTIDAO CC
           SET CC.ncdcrcstatus = 0
             WHERE CC.NCDCRCCERTIDAO in <cfqueryparam value="#numSeqCertidao#"
                                                          cfsqltype="cf_sql_integer"
                                                          list="yes">
    </cfquery>
        </cftransaction>
    <cftransaction action="commit" />
    <cfreturn 0>
    <cfcatch type="any">
        <cftransaction action="rollback" />
        <cfreturn #cfcatch.message#>
        </cfcatch>
</cftry>
</cffunction>

你传递给CFC的是一个Javascript数组。它不是ColdFusion数组。所以对CFC来说,它看起来像一个字符串。将类型更改为"string"或"any",或者完全省略它