首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不呈现视图的ModelGlue ColdFusion应用程序中的Ajax调用

不呈现视图的ModelGlue ColdFusion应用程序中的Ajax调用
EN

Stack Overflow用户
提问于 2009-08-06 10:04:19
回答 4查看 761关注 0票数 1

我在一个ColdFusion应用程序中使用带有ModelGlue的Ajax。我想进行一个Ajax调用来返回值。我不想渲染任何视图。我只想要一个数据库交互,并带回一个值。

我的Ajax调用:

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

我的modelglue事件:

代码语言:javascript
复制
<event-handler name="test.testFunction">
     <broadcasts>
          <message name="testFunction" />
     </broadcasts>
</event-handler>

和我的控制器函数:

代码语言:javascript
复制
<cffunction name="testFunction" returnType="any" output="true" >
     <cfargument name="event" type="any" required="true">
        <cfset justtest = 1>
     <cfreturn justtest>
</cffunction>   

我使用prototype作为我的ajax库。

当我向responseText发出警报时,我得到的值是空值。这是因为我没有在事件处理程序中包含视图部件吗?如果我包括视图部分,那么我将不得不创建一个新的页面,这是我不想做的。有没有可能在不呈现任何视图的情况下,通过ajax调用只获取一个服务器值?根据上面的场景,我想让myresult值为1。

请帮帮忙。Thnx寻求任何帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-07 02:43:15

尝试在控制器函数的末尾使用以下命令:

代码语言:javascript
复制
<CFCONTENT TYPE="text" RESET="Yes"><CFOUTPUT>#serializeJSON(justTest)#
<cfset request.modelGlueSuppressDebugging = true />
<cfsetting showdebugoutput="false" /></CFOUTPUT><cfabort>

所以就像这样:

代码语言:javascript
复制
<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,你应该能够看到来自服务器的响应。

票数 1
EN

Stack Overflow用户

发布于 2009-08-06 13:24:44

当你说你“只想带回一个值”时--这就是你的“观点”。您想要做的是为您的远程(ajax)事件使用一个特殊的视图,该视图只是输出该值。例如,如果您希望它返回JSON,您可以这样做:

事件配置:

代码语言:javascript
复制
<event-handler name="test.testFunction">
     <broadcasts>
          <message name="testFunction" />
     </broadcasts>
     <views>
          <include name="body" template="renderJson.cfm" />
     </views>
</event-handler>

控制器功能:

代码语言:javascript
复制
<cffunction name="testFunction" returnType="any" output="true" >
     <cfargument name="event" type="any" required="true">
     <cfset event.setValue('justtest', 1) />
</cffunction>

renderJson.cfm:

代码语言:javascript
复制
<cfoutput>#serializeJson(event.getValue('justtest'))#</cfoutput>

如果您使用的是Model-Glue 3,则可以使用新的Event Formats特性在现有事件上利用此ajax视图,该事件对不同的视图格式执行相同的操作。

票数 3
EN

Stack Overflow用户

发布于 2011-06-01 08:51:17

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1238008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档