2017-02-13 122 views
0

我想在一些ajax请求完成后,用js-cookie.js设置cookie。 如果我把无法在ajax请求后设置cookie

Cookies.set('cookieName',object) 
var cookie = Cookies.get('cookieName') 
console.log(cookie); 

内的成功,我得到了一个未定义的,但如果我把它Ajax回调之外,我得到的打印输出(当然这不是我想要的,因为回调之前完成该完成)。

我也尝试使用$ .whenAll()函数(https://gist.github.com/fearphage/4341799)等待所有ajax请求完成,但再次在回调函数cookie中未设置。

+0

你有没有试过在'success:function(data){...}'里面设置cookie?您甚至可以将回调直接传递给您正在打包的函数的参数。 – G0dsquad

+0

是的,正如我所说我试图把上面的代码放在“成功:功能(数据){...}”但在console.log()我得到未定义。我不明白你的答案的第二部分。 – user2459104

+0

你可以显示你尝试过的成功功能的整个代码吗? –

回答

0
$('form.login').submit(function(e) { 
     $form = $(this); 
     e.preventDefault(); 
     $.get('someUrl') 
     .done(function(data) { //data is returned async 
      setCookie('weirdName', data, 1); //use async called data 
     }) 
     .fail(function() { 
      $('.error').show(); 
     }); 
    }); 

function setCookie(cname, cvalue, exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires="+ d.toUTCString(); 
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 
} 
+1

Ah thx这就对了 – user2459104

0

你使用Codeigniter吗?我刚刚解决了同样的问题,在我的情况下,在ajax中设置一个cookie,在ajax之外有不同的结果,如不同的网址。

我还不能评论...这就是为什么我在这里发布。

+0

但问题被标记为laravel,所以它不是codeigniter –

+1

虽然我不确定它在这里是相关的,因为我只是想设置浏览器cookie后ajax(我不在乎后端是什么) – user2459104