jquery里使用ajax设置或更改cookie后,使cookie失效变成undefined推荐 亲测 原创 收藏

文章标签: jquery ajax
  • :
  • 11-29 12:12
  • :
  • 42次
  • :
  • 0条
  • 0赞

简介在使用jquery里的ajax对全局的cookie进行设置或更改时,会导致全局的cookie失效,变成undefined的原因及解决方法。l

站长今天在做一个小web程序时,需要完成这样一个目的:

载入页面时,先通过cookie来判断是否是第一次访问,如果不是,发送ajax请求,更新数据库,成功后再更改cookie。

看上去很简单,就和统计一个网页的浏览次数一样,所以脑子里顿时就有了下面这样的写代码的结构和思路:

读取cookie,
if(判断成功){
    $.get(url,function(d){
        //修改网站全局的cookie
    })
}

从上面的结构和思路上,是没有问题的,如果正确的话,那么当我们第一次载入页面时,会发送ajax请求,ajax成功后,会更改网站全局的cookie,这样在刷新页面后,就不会再进行第二次的ajax请求。

但是,站长自己试了很多次,却都没有成功,下面来看站长具体测试的步骤:

最开始,站长按上面的思路写出了完整的代码:

var a=$.cookie("aijquery");    //读取cookie
if(!a){
    $.get("do.php",function(data){
        $.cookie("aijquery","true",{expires:1, path:'/'});
    })
}

代码写完了,站长测试,但却发现页面每次刷新都会发送ajax请求,根本就不知道到底哪里出的问题,为了找出问题,只能用console.log来一点一点的检查:

var a=$.cookie("aijquery");    //读取cookie
console.log(a);
if(!a){
    $.get("do.php",function(data){
        $.cookie("aijquery","true",{expires:1, path:'/'});
        console.log(a);
    })
}

然后按F12查看浏览器的console结果:

这是正确的,也符合我们程序里的逻辑,然后再次刷新页面:

OK,看起来是没有问题,也说明ajax里设置的cookie已经生效了,但是站长再次尝试刷新页面,就又变回了最初的样子,在ajax之外读取的cookie又变成了undefined,这是什么情况?

是浏览器的问题吗?站长换了不同的浏览器,360安全浏览器,360极速浏览器,谷歌浏览器,火狐浏览器,都是这样的问题,在多次刷新后,都会出现ajax外读取cookie时,读取不到的问题。

站长就开始到网上找相关的教程,看是不是ajax设置的cookie不会被保存,但却没有找到相关的文章,只找了一篇“chrome浏览器不会保存非http协议生成的cookie”的文章,那么会不会是这样呢?

站长就开始做了进一步的测试:

$.cookie("aijquery","true",{expires:1, path:'/'});
var a=$.cookie("aijquery");    //读取cookie
console.log(a);
if(!a){
    $.get("do.php",function(data){
        console.log(a);
    })
}

站长先在ajax之外手动设置了一个cookie,然后开始频繁的进行刷新,这时测试的结果是不管刷新多少次,都是正常的,接着站长进一步的测试,在ajax里修改cookie,看会是什么样的结果:

$.cookie("aijquery","true",{expires:1, path:'/'});
var a=$.cookie("aijquery");    //读取cookie
console.log(a);
if(!a){
    $.get("do.php",function(data){
        $.cookie("aijquery","false",{expires:1, path:'/'});
        console.log(a);
    })
}

这时的测试也是完全正常的!!

站长接着再做测试,先手动生成一个cookie,刷新页面,确定正常后,再删除生成cookie的代码,来看看刚才生成的cookie,在频繁的刷新页面后,会不会失效变成undefined。

$.cookie("aijquery","true",{expires:1, path:'/'}); //刷新页面,确定cookie生效后,再删除掉这一句
var a=$.cookie("aijquery");    //读取cookie
console.log(a);
if(!a){
    $.get("do.php",function(data){
        console.log(a);
    })
}

测试的结果也是完全正常的!!

好了,测试到这里,站长已经可以确认了,只要在ajax里涉及到cookie的修改或写入的操作,在频繁的刷新页面时就会引起ajax外的cookie失效,变成undefined的现象。

站长推测这一现象产生的原因可能就是ajax的异步造成的,在ajax外读取cookie时,可能和ajax里修改或写入cookie发生了“交集”,这样就导致了cookie的失效,变成undefined的原因。

要解决也很简单,在ajax完成的动作函数里,不要写修改或写入cookie的动作就行了!



您正在找的文章可能是:
热点文章
热点图文
最近更新