значение хранилища сеанса равно нулю, пока я присвоил значение этому хранилищу сеанса в другом файле JS

#javascript #jquery #ajax #session-storage

#javascript #jquery #ajax #session-storage

Вопрос:

У меня есть два файла JS, и в первом я инициализирую хранилище сеансов с помощью ajax, поэтому я хочу использовать это значение хранилища сеансов в моих других файлах JS. но проблема в том, что хранилище сеансов в других файлах не получает никакого значения, хотя я установил его в первом инициализирующем файле JS ранее. мой пример кода приведен ниже:

JS-файл 1 (инициализация JS-файла, который должен быть запущен сначала):

    $.post(  
        "mypage.php",
        {    

        },function(data) {
   sessionStorage.setItem("data_kind", data.kind);
        }, 'json'
    ); 
  

js-файл 2 и другие (будут использовать data_kind, которые были инициализированы в файле JS 1):

 var my_data_kind = sessionStorage.getItem("data_kind");
console.log(my_data_kind); // it returns null and dont get any value!!!
  

Комментарии:

1. Вы сможете прочитать значение из хранилища только после завершения запроса AJAX

2. спасибо, но есть ли какой-нибудь способ справиться с этой проблемой?

3. Пожалуйста, добавьте теги php и jquery

4. $.post() возвращает объект, подобный отложенному / обещанию. Используйте это, чтобы связать что-то для запуска после завершения запроса. Например const myPagePromise = $.post(...) , тогда в вашем другом файле myPagePromise.then(() => var my_data_kind = ... )

5. Фил, большое спасибо, это работает для меня, и моя проблема решена.

Ответ №1:

Вы сможете прочитать значение из хранилища только после завершения запроса AJAX.

$.post() возвращает объект, подобный отложенному / обещанию. Используйте это, чтобы связать что-то для запуска после завершения запроса.

Например, предполагая, что ваши два файла JS включены в этом порядке

 <script src="the-one-that-does-the-ajax-request.js"></script>
<script src="the-one-that-reads-from-session-storage.js"></script>
  
 // the-one-that-does-the-ajax-request.js

const myPagePromise = $.post("mypage.php", {}, data => {
  sessionStorage.setItem("data_kind", data.kind);
}, "json")
  
 // the-one-that-reads-from-session-storage.js

myPagePromise.then(() => {
  var my_data_kind = sessionStorage.getItem("data_kind")
  console.log(my_data_kind)
})
  

Ответ №2:

Сначала вы должны убедиться, что ваш sessionStorage.setItem("data_kind", data.kind) файл уже выполнен, и убедитесь, что у вас правильный порядок файлов или импорта js

Для меня, когда я отлаживаю свой код, я обычно пишу console.log(‘execute blabla’, data), чтобы дать себе уверенность в том, что мой код в этой строке выполняется и загружается в правильном порядке. Кроме того, не забудьте удалить консоль.регистрируйте, когда функция будет завершена

И, закрыв вкладку / окно, очистить объекты в sessionStorage, как описано здесь https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage