2011-12-27 3 views
3

я использовать этот JavaScript, чтобы захватить все флажки проверяются в Flexigrid и попытайтесь отправить этот массив строк идентификаторов к CFCПередача яваскрипта массив 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> 

Когда я пытаюсь запустить эту функцию, мой сервер отвечает, что аргумент NUMSEQCERTIDAO, переданный функции removeCertidaoCRC, не относится к массиву типов.

У меня заканчиваются варианты в отложенном проекте, в который я вступил совсем недавно.

ответ

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

Это работает безупречно ... но теперь функция успеха/ошибка в AJAX не работает ... он всегда падает на ошибках, но записи были изменены в базе данных – lagranzotto

+0

Вероятно, потому что вы ожидаете json, попробуйте удалить параметр типа данных из вызова ajax или изменить его на text/html –

0

Что вы передаете в CFC - это массив Javascript. Это не массив ColdFusion. Таким образом, CFC выглядит как строка. Измените тип на «string» или «any» или просто опустите его полностью.

Смежные вопросы