Как получить доступ к данным вызова AJAX за пределами успешного обратного вызова [дубликата]

0
$.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 внутри успеха, но он не работает. он регистрирует undefined...

  • 1
    Аякс асинхронный. Вызов не завершился, и обратный вызов успеха не был выполнен, и, следовательно, значение не было установлено, когда выполняется строка console.log() . См. Как вернуть ответ от вызова ajax .
  • 0
    Кстати, это полезно для сообщества и тех, кто публикует ответы, если вы выберете лучший ответ, если на ваш вопрос ответили. Нажмите на галочку в ответе. Спасибо и добро пожаловать в Stack Overflow!
Теги:
cookies

3 ответа

1

Ваш console.log работает до того, как ваш вызов ajax завершается в так называемом состоянии гонки. Браузер добирается до console.log до завершения вызова ajax, поэтому ваш cookie еще не установлен, поскольку функция обратного вызова успеха еще не была вызвана. Попытка размещения этого оператора регистрации в вашем обратном вызове:

success: function(resp) {
  $.cookie("tc", resp.tokenCode);
  console.log($.cookie("tc")); 
}
  • 0
    это все еще регистрирует неопределенное
  • 2
    @ user3095297 Базовая отладка - журнал resp.tokenCode Бьюсь об заклад, пустое значение, поэтому вы resp.tokenCode cookie пустое значение.
Показать ещё 3 комментария
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, вы можете использовать localStorage или sessionStorage следующим образом:

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

Консоль.log работает до обратного вызова. Поместите лог внутри обратного вызова и посмотрите, что произойдет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню