Передача массива JavaScript в CFC Coldfusion через Json - PullRequest
3 голосов
/ 27 декабря 2011

я использую этот javascript для захвата всех флажков, отмеченных во flexigrid, и пытаюсь отправить этот массив идентификаторов строк в 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, не относится к типу array.

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

Ответы [ 2 ]

4 голосов
/ 27 декабря 2011

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 голосов
/ 27 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...