Как передать аргумент onclick в CFC для обновления базы данных через AJAX? - PullRequest
0 голосов
/ 07 октября 2010

новичок в Ajax. Просто пытаюсь сделать простое приложение ajax / cfc голосования да / нет. Не могу заставить его работать

То, что я пытаюсь сделать, - это простое приложение для голосования «Да или Нет», в котором отображается число голосов, поданных за каждую ссылку. Например:

  • Да (882 голоса)
  • Нет (163 голоса) .

Когда посетитель голосует, базу данных следует обновить с помощью голосования и записать избирателя в другую таблицу (чтобы он не мог голосовать снова). Наконец, отображается подтверждающее сообщение с новым подсчетом голосов:

  • Вы проголосовали "Да" (883 голоса) или
  • Вы проголосовали Нет (164 голоса)

Теперь у меня все работало, кроме обновления базы данных. Я попытался переработать JavaScript (AJAX) для вызова CFC, добавив ($.ajax) и переместив ответные сообщения в часть ajax. Однако сейчас это не работает вообще. Что я сделал не так?

Ниже приведен новый код, который я придумал. Чтобы этот вопрос был простым, я просто показываю часть голосования «Нет». Я на правильном пути? Кажется, это было бы очень просто.

Ссылка для голосования

<A HREF="javascript:()" onclick="VoteNoID('#IdeaID#');">
   <SPAN ID="VoteNoMessage">No</SPAN>
</A> 
- <SPAN ID="NewNoCount">#NoCount#</SPAN>

Ajax

<script  LANGUAGE="JavaScript">  
   function VoteNoID()  
    {  
     var VoteNoDescription = document.getElementById("VoteNoDescription").style.display='none';  
            $.ajax({   
                type: "POST",   
                url: "../CFC/VoteNo.cfc?method=VoteNoID",   
                data: recordata,   
                dataType: "html",   
                success: function(message) {   
                    $('#VoteNoMessage').html("you voted No");  
                    $('#NewNoCount').html("#NewCount#");  
                    }   
                });   
            });   
        } `     
<script>



VoteNo.cfc

<cffunction name="NoVote" access="remote" returntype="string" 
    <cfargument name="VoteNo" type="string" required="yes">
    <CFQUERY NAME="NoCountCK" DATASOURCE="MyDSN">
        SELECT  *
        FROM    Ideas
        WHERE   IdeaID = #arguments.VoteNo#
    </CFQUERY>
    <CFSET NewCount=#NoCountCK.NoCount#+1>
    <CFQUERY NAME="UpdateNoCount" DATASOURCE="MyDSN">
        UPDATE  Ideas
        SET     NoCount = #NewCount#
        WHERE   IdeaID = #arguments.VoteNo#
    </CFQUERY>
    <CFQUERY NAME="MemberVote" DATASOURCE="MyDSN">
        INSERT INTO MemberVoteRecord(IdeaID,MemberID,DatePosted,YesNo)
        VALUES(#arguments.VoteNo#,#COOKIE.Member_ID#,#NOW()#,N)
    </CFQUERY>
    <cfreturn NewCount>
</cffunction>

1 Ответ

0 голосов
/ 29 апреля 2013

Успешная часть нашего вызова .ajax () просто устанавливает html в переменную # newcount #. Я не уверен, где эта переменная устанавливается изначально, но если вы посмотрите на сгенерированный необработанный HTML, вы увидите, что здесь необработанный HTML содержит статическое число. Вы должны установить это как переменную javascript, а не как переменную ColdFusion.

Итак, попробуйте установить для этой переменной значение message, которое является аргументом, передаваемым вашему успешному обратному вызову. Сообщение должно совпадать с тем, что возвращает ваш CFC. То есть если вы вызываете CFC прямо в браузере, это то, что ваш браузер будет отображать.

success: function(message) {   
        $('#VoteNoMessage').html("you voted No");  
            $('#NewNoCount').html(**message**);  
           }   

Кроме того, вы захотите настроить формат возврата вашей функции CFC на «обычный». .

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