Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Json将javascript数组传递给coldfusion CFC_Javascript_Ajax_Json_Coldfusion - Fatal编程技术网

通过Json将javascript数组传递给coldfusion CFC

通过Json将javascript数组传递给coldfusion CFC,javascript,ajax,json,coldfusion,Javascript,Ajax,Json,Coldfusion,我使用此javascript捕获FlexGrid中选中的所有复选框,并尝试将此行ID数组发送到CFC function removeCertidao(){ var allVals = []; $("input[id='certidao']:checked").each(function() { allVals.push($(this).val()); }); if (allVals.length == 0) { alert('É n

我使用此javascript捕获FlexGrid中选中的所有复选框,并尝试将此行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>

更新CRC\U证书到CC
设置CC.ncdcrcstatus=0
其中CC.NCDCRCCERTIDAO位于
当我尝试运行此函数时,服务器会回答传递给removeCertidaoCRC函数的NUMSEQCERTIDAO参数不是数组类型


我最近刚加入的一个延迟项目的选项已经用完了。

您要传递给CFC的是一个Javascript数组。这不是ColdFusion阵列。所以对CFC来说,它就像一根绳子。将类型更改为“string”或“any”,或者完全忽略它。

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>
函数removeCertidao(){
var-allVals=[];
$(“输入[id='certidao']:选中”)。每个(函数(){
allVals.push($(this.val());
});
如果(allVals.length==0){
警觉(‘Énecessário escolher ao menos uma certidão.’);
返回false;
}否则{
警报(ALLVAL);
}
$.ajax({
类型:“post”,
url:“../CFC/CRC.CFC”,
数据:{
方法:“removeCertidaoCRC”,
numSeqCertidao:allVals.join(),
},
数据类型:“json”,
成功:函数(){
警惕(“是”);
},
错误:函数(){
警告(“否”);
}
});             
}
更新CRC\U证书到CC
设置CC.ncdcrcstatus=0
其中CC.NCDCRCCERTIDAO位于

这项工作完美无瑕。。。但是现在ajax中的成功/错误函数不起作用了。。。它总是出错,但是数据库中的记录被更改可能是因为您需要json,请尝试从ajax调用中删除datatype参数,或者将其更改为text/htmlevery。细微的差别是,我必须将代码转储到beyond compare中才能看到它
.join(),
用于win,这也解决了我遇到的问题(将JavaScript数组传递给CFC)。