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 过期的天数(整数)。
我正在尝试将 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 过期的天数(整数)。