ExtJS Store Ajax 在 Cookie 中查询并加载

ExtJS Store Ajax Query in Cookies & Load

我正在尝试将 Ajax 请求存储在 cookie 中,以便在用户刷新页面时无需 Ajax 调用即可加载它。

所以,这有效:this.successLoad(response);

但是这个:this.successLoad(Ext.util.Cookies.get('JSON')); 即使我将 cookie JSON 设置为等于我从成功区域的 Ajax 请求获得的响应,它也不起作用。我尝试编码到 cookie 中,然后解码 cookie,但这无济于事。

长话短说,我想检查浏览器是否有 JSON cookie,如果有,只需将 JSON 发送到 this.successLoad 以加载页面,如果没有(这意味着用户第一次访问)然后创建 JSON cookie 并在第一次正常加载页面。 JSON cookie 设置不正确。

Ext.Ajax.request({
    url: '/Authorization',
    method: 'POST',
    useDefaultXhrHeader: false,
    withCredentials: true,
    jsonData: {
        activationCode: "",
    },
    scope: this,
    success: function (response) {
        this.getView().unmask();

        // Cookie Creation Here
        Ext.util.Cookies.clear('JSON');
        Ext.util.Cookies.set('JSON', res);

        this.successLoad(response);
}

一般情况下,cookies都是纯文本文件,只能是字符串。您不能在 cookie 中存储对象。因此,您需要使用 Ext.encode(response) 对对象进行编码,如下所示:

Ext.util.Cookies.set('JSON',Ext.encode(response));

同样在检索的时候,需要解码如下:

this.successLoad(Ext.decode(Ext.util.Cookies.get('JSON')));

希望对您有所帮助!

如果您不想使用 Extjs cookie 库,那么您可以使用以下实用函数:

getCookie:function(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    },
    setCookie:function(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        var expires = "expires="+d.toUTCString();
        if(window.location.protocol=="https:")
        {
            document.cookie = cname + "=" + cvalue + ";" + expires + ";secure;path=/";
        }
        else
        {
            document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
        }
    },

将代码放在一些单例中以访问 name.Where cname 是您的 cookie(字符串)的名称。 cvalue 是您的 cookie 的值(字符串)和 extdays,如果您希望 cookie 过期的天数(整数)。