ModelGlue ColdFusion 应用程序中的 Ajax 调用而不渲染视图

发布于 2024-07-30 11:46:46 字数 1055 浏览 7 评论 0原文

我在 ColdFusion 应用程序中将 Ajax 与 ModelGlue 结合使用。 我想进行 Ajax 调用来返回一个值。 我不想呈现任何视图。 我只想进行数据库交互并返回一个值。

我的 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时,我得到空值。 这是因为我没有将视图部分包含在事件处理程序中吗? 如果我包含视图部分,那么我必须创建一个我不想做的新页面。 是否可以通过ajax调用仅获取服务器值而不渲染任何视图? 根据上述情况,我希望 myresult 值为 1。

请帮忙。 感谢您的帮助。

I am using Ajax with ModelGlue in a ColdFusion Application. I want to make an Ajax call to return a value. I do not want to render any view. I just want a database interaction and bring back a value.

My Ajax call:

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

my modelglue event :

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

and my controller function:

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

I am using prototype as my ajax library.

When i alert the responseText i am getting null value. Is this bcoz i have not included the view part in the event handler? If i included the view part then i wud have to create a new page which i dont want to do. Is it possible to get just a server value by ajax call without rendering any view?
I want to have myresult value as 1 according to the above scenario.

Pls help. Thnx for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

尽揽少女心 2024-08-06 11:46:48

警告:如果 Coldfusion 8,并且 application.cfc 中有 OnRequest(),则可能存在相关的已知 cf8 错误。 有关解决方法,请参阅
http://www .coldfusionjedi.com/index.cfm/2008/3/19/Ask-a-Jedi-Ajaxbound-requests-and-onRequest

WARNING: if Coldfusion 8, and have OnRequest() in application.cfc, there may be a related known cf8 bug. For a workaround, see
http://www.coldfusionjedi.com/index.cfm/2008/3/19/Ask-a-Jedi-Ajaxbound-requests-and-onRequest

染年凉城似染瑾 2024-08-06 11:46:48

在这种情况下,您确实应该绕过 MVC 框架来调用服务的远程代理。 :)

哦,不要忘记,如果您使用的是 CF8,则可以使用

In this situation, you should really be calling the remote proxy of your service, bypassing the MVC framework. :)

Oh, and don't forget you can use <cfajaxproxy> if you're using CF8.

心意如水 2024-08-06 11:46:47

当你说你“只是想带回一个价值”时——那就是你的“观点”。 您想要做的是为您的远程(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 视图,该事件对于不同的视图格式执行相同的操作。

When you say you "just want to bring back a value" -- that's your "view". What you want to do is use a special view for your remote (ajax) event that just spits out the value. For example, if you want it to return JSON, you might do this:

Event Configuration:

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

Controller function:

<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>

If you're using Model-Glue 3, you can use the new Event Formats feature to piggy-back this ajax view on an existing event that does the same thing for a different view-format.

蛮可爱 2024-08-06 11:46:47

尝试在控制器函数的末尾使用它:

<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>

这将保留您当前的视图并以 json 形式返回“justTest”。

如果您使用的是 Firefox,您应该能够看到服务器的响应。

Try using this at the end of your controller function:

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

So like this:

<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>

This will keep your current view and return 'justTest' as a json.

If you are using firefox you should be able to see the reponse from the server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文