我有一个Ajax请求,它将一些数据发送到页面,并期望返回一个真实或假的值,具体取决于数据是否已保存.在我的控制器中,我会做所有事情并将内容设置为真或假值.我真的不想创建一个视图只是输出1变量,所以我想知道是否有一种方法,我不必使用视图,只使用控制器输出简单的字符串.
解决方法
我相信你不能完全禁用视图,但有一个非常简单的解决方法:你可以创建一个视图并将其用于许多操作.
假设我们已经创建了view views / main / ajax.cfm,它里面可能包含什么内容?显然,最简单的方法是:
<cfoutput>#HTMLEditFormat(rc.response)#</cfoutput>
我个人喜欢返回JSON,如果需要,它允许我有状态字段和数据.这样我的视图看起来像这样:
<cfheader name="Content-Type" value="application/json" /> <cfoutput>#SerializeJSON(rc.response)#</cfoutput>
无论如何,现在在我们的行动中,我们需要做这样的事情:
// prevent displaying the layout request.layout = false; // force special view variables.fw.setView("main.ajax"); // init response (according to the choice made earlier) rc.response["status"] = "OK"; rc.response = "";
还有一个问题.有时你不希望直接访问AJAX页面(比如在浏览器中打开),或者反之亦然 – 想要进行一些调试.
在CFWheels框架中有一个很酷的助手isAjax,很容易移植到FW / 1.它可以像向控制器添加这样的方法一样简单:
/* * Check if request is performed via AJAX */ private boolean function isAjax() { return (cgi.HTTP_X_REQUESTED_WITH EQ "XMLHTTPRequest"); }
/* * Set up for AJAX response */ private struct function setAjax() { // prevent displaying the layout request.layout = false; // force special view variables.fw.setView("main.ajax"); local.response["status"] = "OK"; return local.response; }
所以在我的动作代码中,整个检查看起来像这样,非常紧凑和方便:
if (isAjax()) { rc.response = setAjax(); } else { return showNotFound(); }
希望这可以帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。