如何在成功回调之外访问AJAX调用数据

时间:2013-12-18 00:20:03

标签: javascript jquery cookies

$.ajax({
  type: 'POST',
  url: 'xxxx.com/init',
  ContentType: 'application/json',
  dataType: 'json',
  data: data,
  success: function(resp) {
    $.cookie("tc", resp.tokenCode); 
  }
});

console.log($.cookie("tc"));

我尝试在成功中创建一个cookie,但它似乎不起作用。它记录未定义......

3 个答案:

答案 0 :(得分:1)

那是因为ajax调用是异步操作。可以看到cookie的函数需要设置为回调或在页面重新加载时访问(如果cookie仍然存在)。

$.ajax({
  type: 'POST',
  url: 'xxxx.com/init',
  ContentType: 'application/json',
  dataType: 'json',
  data: data,
  success: function(resp) {
    $.cookie("tc", resp.tokenCode);
    myFunction();
  }
});

function myFunction() { 
  console.log($.cookie("tc"));
}

由于您在使用$.cookie方面遇到问题,可以像这样使用localStoragesessionStorage

localStorage.tc = resp.tokenCode;
console.log(localStorage.tc);

答案 1 :(得分:1)

您的console.log在您的ajax呼叫完成之前正在运行,这就是所谓的竞争条件。在ajax调用完成之前,浏览器会转到console.log,因此尚未设置您的cookie,因为尚未调用成功回调函数。尝试将该日志语句放在回调中:

success: function(resp) {
  $.cookie("tc", resp.tokenCode);
  console.log($.cookie("tc")); 
}

答案 2 :(得分:0)

console.log在成功回调之前运行。将日志放入回调中,看看会发生什么。