2011-12-27 53 views
3

我使用JavaScript来捕获所有复选框在flexigrid检查,并尝试这个数组的行ID发送到CFC传递的JavaScript数组的ColdFusion CFC通过JSON

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'); 
     } 
    });    
} 

CFC下面

<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> 

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

我在最近刚刚进入的延迟项目中缺少选项。

回答

3

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> 
+0

这完美的作品......但现在在阿贾克斯成功/错误功能不工作...它总是落在错误,但记录在数据库 – lagranzotto 2011-12-27 18:26:26

+0

改变可能是因为您期待json,请尝试从ajax调用中移除数据类型参数或将其更改为text/html – 2011-12-27 18:33:05

0

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