1

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

请帮忙。感谢您的帮助。

4

4 回答 4

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,则可以使用新的事件格式功能将这个 ajax 视图搭载在现有事件上,该事件对不同的视图格式执行相同的操作。

于 2009-08-06T13:24:43.827 回答
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>

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

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

于 2009-08-07T02:43:14.810 回答
0

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

于 2011-06-01T00:51:16.940 回答
-1

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

哦,别忘了<cfajaxproxy>如果你使用的是 CF8,你可以使用。

于 2009-08-06T18:04:19.527 回答