Ajax-вызов в ModelGlue ColdFusion Application без визуализации представления - PullRequest
1 голос
/ 06 августа 2009

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

Мой звонок по Ajax:

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

мое событие склеивания модели:

<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 в соответствии с приведенным выше сценарием.

Просьба помочь. Спасибо за любую помощь.

Ответы [ 4 ]

3 голосов
/ 06 августа 2009

Когда вы говорите, что «просто хотите вернуть значение» - это ваше «представление». То, что вы хотите сделать, это использовать специальное представление для вашего удаленного (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, вы можете использовать новую функцию Форматы событий для привязки этого представления Ajax к существующему событию, которое делает то же самое для другого формата представления.

1 голос
/ 07 августа 2009

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

<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 голосов
/ 01 июня 2011

ПРЕДУПРЕЖДЕНИЕ: если Coldfusion 8 и имеют OnRequest () в application.cfc, возможно, имеется связанная известная ошибка cf8. Обходной путь см. http://www.coldfusionjedi.com/index.cfm/2008/3/19/Ask-a-Jedi-Ajaxbound-requests-and-onRequest

0 голосов
/ 06 августа 2009

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

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

...