加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 仅在FW1中使用没有视图的控制器

发布时间:2020-12-16 02:53:55 所属栏目:百科 来源:网络整理
导读:我有一个Ajax请求,它将一些数据发送到页面,并期望返回一个真实或假的值,具体取决于数据是否已保存.在我的控制器中,我会做所有事情并将内容设置为真或假值.我真的不想创建一个视图只是输出1变量,所以我想知道是否有一种方法,我不必使用视图,只使用控制器输出
我有一个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();
}

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读