我在ColdFusion应用程序中使用带有ModelGlue的Ajax。我想进行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。
请帮助。 Thnx可以提供任何帮助。
答案 0 :(得分: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 :(得分: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,你应该能够看到来自服务器的响应。
答案 2 :(得分:0)
警告:如果是Coldfusion 8,并且在application.cfc中有OnRequest(),则可能存在相关的已知cf8错误。有关解决方法,请参阅 http://www.coldfusionjedi.com/index.cfm/2008/3/19/Ask-a-Jedi-Ajaxbound-requests-and-onRequest
答案 3 :(得分:-1)
在这种情况下,您应该绕过MVC框架来调用服务的远程代理。 :)
哦,如果您使用的是CF8,请不要忘记您可以使用<cfajaxproxy>
。