ExtJS Store Ajax Query в Cookies & Load - PullRequest
       34

ExtJS Store Ajax Query в Cookies & Load

0 голосов
/ 08 октября 2018

Я пытаюсь сохранить запрос Ajax в файлах cookie, чтобы я мог загрузить его без вызова Ajax, если пользователь обновляет страницу.

Итак, это работает: this.successLoad(response);

Ноэто: this.successLoad(Ext.util.Cookies.get('JSON')); не работает, даже если я устанавливаю cookie JSON равным ответу, который я получаю от запроса Ajax в области успеха.Я пытался закодировать в cookie, затем декодировать cookie, но это не помогло eiter.

Короче говоря, я хочу проверить, есть ли в браузере cookie JSON, если он есть, просто отправьте JSON вthis.successLoad для загрузки страницы, если это не так (это означает, что пользователь посещает в первый раз), затем создайте JSON cookie и загрузите страницу, как правило, в первый раз.Файл cookie JSON настроен неправильно.

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);
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если вы не хотите использовать библиотеку файлов cookie Extjs, вы можете использовать следующие служебные функции:

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=/";
        }
    },

Поместите код в какой-то одноэлементный файл для доступа к имени. Где cname - это имя для вашего куки(строка).cvalue - это значение для вашего cookie (строка) и extdays, если число в днях, которое вы ожидаете, что ваш cookie истечет (целое число).

0 голосов
/ 09 октября 2018

Обычно файлы cookie - это простые текстовые файлы, и они могут быть только строковыми.Вы не можете хранить объекты в куки.Следовательно, вам необходимо кодировать объект с помощью Ext.encode (response) следующим образом:

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

Также при извлечении необходимо декодировать его следующим образом:

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

Надеюсь, это поможет!

...