Вызов cfquery в javascript, но он ничего не делает

Я пытаюсь создать запрос с помощью Coldfusion (cfquery), чтобы получить несколько сумм в долларах, добавить их, а затем посмотреть, соответствует ли она сумме в долларах, вычисляемой в приложении. Но это ничего не делает.

Я пытаюсь сделать все это в javascript.

Вот код.

function ValidateFunding(){
   var casenum = document.getElementById('CaseNum').value;
   var cycle = document.getElementById('Cycle').value;
   var year = document.getElementById('FSYear').value;
   var cnty = document.getElementById('selCounty'); 
   var cntyID = cnty.options[cnty.selectedIndex].value;

   <cfquery name="PSP" datasource="QueryTest">
    SELECT g.Fee220 + g.Fee330 + g.Fee456 + g.Fee225 AS GrandTotal
      FROM ProgFees g INNER JOIN County ON g.CountyID = cntyID
     WHERE g.Year = year
       AND g.Cycle = cycle
       AND g.CaseNum = casenum       
   </cfquery>
   if (document.getElementById('totbud').value = PSP.GrandTotal){
    alert('The fee matches.');
    return false;
   }
   else 
  {
    alert('Fees do not match.');
  }
         return true;
} 

person tnlewis    schedule 13.03.2013    source источник
comment
Извините, но это не сработает. Вы можете использовать CF для вывода динамических js, но вы не можете использовать код CF внутри js, как это. Вам нужно использовать AJAX для обратного вызова на сервер и возврата результатов запроса в ваш код js.   -  person Just Aguy    schedule 13.03.2013
comment
Чтобы понять, почему это не работает, взгляните на источник сгенерированной страницы. Вам нужно будет изучить удаленные вызовы cfc и ajax, чтобы заставить это работать.   -  person Busches    schedule 13.03.2013
comment
Вот ссылка на функции ColdFusion AJAX. Прочтите несколько примеров, и вы увидите, как следует использовать js, AJAX и CF для достижения желаемого. Функции ColdFusion AJAX   -  person Just Aguy    schedule 13.03.2013
comment
Вот краткое изложение трех предыдущих комментариев. JS работает на клиенте. CF работает на сервере. Вы можете заставить их играть вместе, но это требует дополнительной работы. Тем не менее, CF, возможно, сделал большую часть работы за вас. Проверьте документы на cfinput и посмотрите примеры привязки.   -  person Dan Bracuk    schedule 13.03.2013
comment
Также см. эти три ответа относительно AJAX и ColdFusion без использования cfajaxproxy stackoverflow.com/a/14513531/244136 stackoverflow.com/a/14750208/244136 переполнение стека. com/a/15209183/244136   -  person Travis    schedule 14.03.2013


Ответы (1)


Вот страница, которую я разработал для теста. В коде есть комментарии, помогающие объяснить, что происходит. Две ключевые строки — это тег <cfajaxproxy>, а jd.getData(); — мой вызов AJAX к CF.

<cfscript>
variables.folders = {"client":["Favorites","Not Used"],"org":["2012","2011"],"public":["New","Old"]};
</cfscript>    
<cfajaxproxy cfc="cfc.jsondata" jsclassname="emaildata" /> 
<!DOCTYPE html>
<html>
    <head>
    <title>DevJSON</title>
    <script src="js/jquery.1.7.2.js" type="text/javascript" language="JavaScript"></script>
    <script src="js/handlebars.js" type="text/javascript" language="JavaScript"></script>
    <link rel="stylesheet" href="css/json.css" type="text/css"/>
    <script type="text/javascript">
        <!--- toScript will output CF vars as js vars --->
    <cfoutput> 
        var #toScript(variables.folders, 'folders')#;
        var #toScript(cgi.http_host & '/data/emaildata.json','jsonPath')#;
    </cfoutput> 
        var jd = new emaildata();
        // setup my js object from cfajaxproxy above

        var buildGrid = function(dataObj){
            var menus;
            var source = $('#grid').html();
            var template = Handlebars.compile(source);
            $("#mainContent").hide(); 
            $("#mainContent").children().remove();
            $("#mainContent").append(template(dataObj));
            $("#mainContent").fadeIn('slow');
        }

        // Error handler for the asynchronous functions. 
        var badJson = function(statusCode, statusMsg){ 
            alert('Status: ' + statusCode + '<br /><br /> ' + statusMsg); 
        }

        // output data 
        var buildmenu = function(){
            $.each(folders, function(fkey,fval) {
                if(this.indexOf() < 1){
                    $('li[data-type="' + fkey + '"] > div').append('<ul class="' + fkey + '"></ul>');
                }
                $.each(fval, function(dkey, dval){
                    $('[class="' + fkey + '"]').append('<li id="' + fkey + '">' + dval + '</li>');
                });
            });
        }            

        $(document).ready(function(){
            buildmenu();
            $('.directory > ul > li').click( function() {
                //set callback, errorhandler and then call the getData function in my CFC
                jd.setCallbackHandler(buildGrid);
                jd.setErrorHandler(badJson);
                jd.getData(this.id);
                $(".directory > ul > li").removeClass("highlight");
                $(this).addClass('highlight');                    
        });
            $("#mainContent").css('display','none');    
            $('li[data-type]').css('cursor','pointer');

        });

    </script>
    <!--- Setup handlebars template --->
    <script id="grid" type="text/x-handlebars-template">
        <div class="gridDetail">
            {{#each DATA}}
                <div class="row">
                    {{#each this}}
                    <span class="cell">
                      {{.}}&nbsp;
                    </span>
                    {{/each}}
                </div>
            {{/each}}
        </div>
    </script>            
</head>
person Just Aguy    schedule 13.03.2013