2013-09-13 2 views
1

На моей странице генерируются случайные величины из cfquery на странице, которая будет использоваться в качестве случайного приза и случайного сотрудника, выигравшего приз.Как отправить переменные на страницу действия coldfusion с сообщением ajax?

<cfset prizeID="#prize.prize_ID[variables.prizeRow]#"> 

Я тогда cfform на странице, где я поставил текстовые входы к этим переменным и использовать следующий код, чтобы представить его на страницу действий сервера, на котором база данных обновляет свою таблицу с указанием приза утверждал:

function submitClaim() { 
ColdFusion.Ajax.submitForm('claimyourprize', 'claim.cfm'); 
} 

Я пытаюсь найти альтернативу этому, когда я использую Ajax для отправки переменных (priorityID, winnerID и т. Д.) На сервер.

Вот так близко, как я получил:

function Claim() { 
     $.ajax({ 
      type: "POST", 
      url: "claim.cfm", 
      data: { claimedPrize: "#prizeID#", claimedEmployee: "#employeeID#"} 
     }).done(function() { 
      alert("claimed"); 
     }) 
    } 

В настоящее время я звоню функцию на кнопку мыши на «претензии» приз.

Вот один из вопросов, на мой claim.cfm:

<cfquery name="updateQuantity" datasource="christmas"> 
    UPDATE PRIZES 
    SET QUANTITY = QUANTITY - 1 
    WHERE prize_ID = [ID sent from the client needs to go here] 
    </cfquery> 
+0

Ваш вопрос немного запутанным, как вы смешиваете на стороне клиента (AJAX) и на стороне сервера () терминологии, как если бы они как-то связаны или могут взаимодействовать. Где находится # thisSpin.spinnumber #, # priorID # и # employeeID #? Что вы получаете на сервере после того, как сообщение сделано? Можете ли вы, пожалуйста, отредактировать код, чтобы включить, откуда этот материал, и дать понять, что такое код на стороне клиента и что такое код на стороне сервера (это поможет вам понять, что вы делаете) –

+0

Я использую cfset для установки моего сотрудника/приведите переменные в случайную строку в cfquery. Все это инициируется на клиентской странице (index.cfm). Я обновил исходное сообщение, чтобы получить более подробную информацию. – user2733971

+0

Спасибо за обновление вашего вопроса. Я думаю, что это может помочь, если вы обойдетесь идеей «страницы» и вместо этого подумаете о «CFML-коде» и «Javascript-коде», потому что, хотя они могут находиться в одном и том же * файле *, они не выполняются одновременно. Чтение этого может помочь: http://cfmlblog.adamcameron.me/2012/10/the-coldfusion-requestresponse-process.html. Вы не ответили на мой вопрос относительно того, что на самом деле происходит *, когда вы вызываете 'Claim()'. Ваш вопрос на самом деле не дает понять, в чем проблема. Я понимаю, что он не делает «что вам нужно», но какая часть? –

ответ

0

Ваш вопрос так прост, как этот бит:

WHERE prize_ID = [ID sent from the client needs to go here] 

?

В этом случае, когда вы делаете POST с помощью AJAX, данные, отправляемые с помощью запроса AJAX, передаются как поля формы и заканчиваются в области «FORM», поэтому вам необходимо изменить этот код быть вдоль линий:

WHERE prize_ID = <cfqueryparam value="#form.claimedPrize#" cfsqltype="CF_SQL_INTEGER"> 

(я предполагаю, что это целое число)

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

Как «форма область не заселять», или «claim.cfm никогда не называют» или «Я получаю ошибку JS» и т.д.

1

Вы для завершения заполнения формы claim.cfm страницы. На странице Claim.cfm вы получите доступ к форме. Я бы предложил вам добавить ответ, так что вы можете получить какой-то результат на клиенте.

function Claim() { 
    $.ajax({ 
     type: "POST", 
     url: "claim.cfm", 
     data: { claimedPrize: "#prizeID#", claimedEmployee: "#employeeID#"} 
    }).done(function(returnresult) { 
     alert(returnresult); 
    }) 
} 

И это будет страница claim.cfm

<cfif isDefined("form.claimedPrize")> 
    <cfquery name="updateQuantity" datasource="christmas"> 
     UPDATE PRIZES 
     SET QUANTITY = QUANTITY - 1 
     WHERE prize_ID = <cfqueryparam value="#form.claimedPrize#" cfsqltype="CF_SQL_INTEGER" /> 
    </cfquery> 
    SUCCESS! 
<cfelse> 
    SOMETHING WENT WRONG! 
</cfif> 

butmuch лучшее решение иметь Cfc (компонент) unstead CFM (шаблон) и представить форму, чтобы cffunction.

претензии.файл CFC:

<cfcomponent displayName="My claim Component"> 
<cffunction name="claim" output="false" access="remote" returntype="string"> 
    <cfargument name="claimedPrize" required="true" type="numeric"/> 
    <cfargument name="claimedEmployee" required="true" type="numeric"/> 
    <cfquery name="updateQuantity" datasource="christmas"> 
     UPDATE PRIZES 
     SET QUANTITY = QUANTITY - 1 
     WHERE prize_ID = <cfqueryparam value="#arguments.claimedPrize#" cfsqltype="CF_SQL_INTEGER" /> 
    </cfquery> 
<cfreturn "OK" /> 
</cffunction> 
</cfcomponent> 

Тогда Ajax вызов будет выглядеть следующим образом:

function Claim() { 
    $.ajax({ 
     type: "POST", 
     url: "claim.cfc?method=claim", 
     data: { claimedPrize: "#prizeID#", claimedEmployee: "#employeeID#"} 
    }).done(function(returnresult) { 
     alert(returnresult); 
    }) 
} 
Смежные вопросы