#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