2009-08-06 2 views
1

Я использую Ajax с ModelGlue в приложении ColdFusion. Я хочу сделать вызов Ajax, чтобы вернуть значение. Я не хочу делать какие-либо представления. Я просто хочу взаимодействие с базой данных и вернуть значение.Ajax вызов в приложении ModelGlue ColdFusion без визуализации вида

Мой Ajax вызов:

new Ajax.Request(root+'test.testFunction',{ 
    method: 'post', 
    parameters: {param1:paramval}, 
    onSuccess: function(response){ 
    alert(response.responseText); 
    var myresult = response.responseText; 
    } 
}); 

мой modelglue событие:

<event-handler name="test.testFunction"> 
    <broadcasts> 
      <message name="testFunction" /> 
    </broadcasts> 
</event-handler> 

и моя функция контроллера:

<cffunction name="testFunction" returnType="any" output="true" > 
    <cfargument name="event" type="any" required="true"> 
     <cfset justtest = 1> 
    <cfreturn justtest> 
</cffunction> 

Я использую прототип как мой AJAX библиотеки.

Когда я предупреждаю responseText, я получаю нулевое значение. Является ли это bcoz, я не включил часть представления в обработчик событий? Если я включил часть представления, тогда мне нужно создать новую страницу, которую я не хочу делать. Возможно ли получить только значение сервера с помощью ajax-вызова без визуализации какого-либо представления? Я хочу иметь значение myresult как 1 согласно приведенному выше сценарию.

Помощь Pls. Thnx за любую помощь.

ответ

1

Попробуйте использовать это в конце вашей функции контроллера:

<CFCONTENT TYPE="text" RESET="Yes"><CFOUTPUT>#serializeJSON(justTest)# 
<cfset request.modelGlueSuppressDebugging = true /> 
<cfsetting showdebugoutput="false" /></CFOUTPUT><cfabort> 

Так как это:

<cffunction name="testFunction" returnType="any" output="true" >  
<cfargument name="event" type="any" required="true">   

<cfset justtest = 1> 

<CFCONTENT TYPE="text" RESET="Yes"><CFOUTPUT>#serializeJSON(justTest)# 
<cfset request.modelGlueSuppressDebugging = true /> 
<cfsetting showdebugoutput="false" /></CFOUTPUT><cfabort> 

</cffunction> 

Это позволит сохранить текущее представление и возвращение «justTest» как JSON.

Если вы используете firefox, вы сможете увидеть ответ с сервера.

+0

@Masterbuddha ... thnx ..it сработал ... u один адский кодер. Если я правильно понимаю, функция ничего не возвращает, а вместо этого сервер возвращает данные в форме cfcontent. В этом случае cfcontect фактически выступает в качестве взгляда. Я прав? anyways thnx много человек ..... – ajithmanmu

+1

Что-то в этом решении действительно трет меня не так. Если вы хотите прервать жизненный цикл события Model-Glue, для чего следует использовать событие Model-Glue? В этом случае я бы сделал, как предложил Генри, и просто использовать удаленный прокси. –

3

Когда вы говорите, что «просто хотите вернуть значение» - это ваш «вид». То, что вы хотите сделать, это использовать специальный вид для вашего удаленного (ajax) события, которое просто выплевывает значение. Например, если вы хотите, чтобы вернуть JSON, вы можете сделать это:

Конфигурация события: функции

<event-handler name="test.testFunction"> 
    <broadcasts> 
      <message name="testFunction" /> 
    </broadcasts> 
    <views> 
      <include name="body" template="renderJson.cfm" /> 
    </views> 
</event-handler> 

Контроллер:

<cffunction name="testFunction" returnType="any" output="true" > 
    <cfargument name="event" type="any" required="true"> 
    <cfset event.setValue('justtest', 1) /> 
</cffunction> 

renderJson.cfm:

<cfoutput>#serializeJson(event.getValue('justtest'))#</cfoutput> 

Если вы используете Model-Glue 3, вы можете использовать новую функцию Event Formats для копирования этого представления ajax на существующее событие, которое делает то же самое для другого вида.

-1

В этой ситуации вы действительно должны называть удаленный прокси-сервер своей службы, минуя структуру MVC. :)

О, и не забывайте, что вы можете использовать <cfajaxproxy>, если используете CF8.

+0

Это не похоже на консенсус, достигнутый в вашем вопросе – Antony

+0

Это зависит. В этом случае разумное обращение к реальному методу имеет смысл. – Henry