通过Json将javascript数组传递给coldfusion CFC
我使用此javascript捕获FlexGrid中选中的所有复选框,并尝试将此行ID数组发送到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
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)。