簡體   English   中英

會話存儲值為空,而我在另一個 JS 文件中為此會話存儲賦予了值

[英]session storage value is null while I have given a value to this session storage in another JS file

我有兩個 JS 文件,第一個我使用 ajax 初始化會話存儲,所以我想在我的另一個 JS 文件中使用這個會話存儲值。 但問題是,當我之前在第一個初始化 JS 文件中設置它時,另一個文件中的會話存儲沒有得到任何值。 我的示例代碼如下:

JS文件1(初始化必須首先運行的JS文件):

   $.post(  
        "mypage.php",
        {    

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

js 文件 2 和其他(將使用已在 JS 文件 1 中初始化的 data_kind):

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

您只能在 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)
})

你必須首先確保你的sessionStorage.setItem("data_kind", data.kind)已經被執行,並確保你有正確的或導入的 js 文件順序

對我來說,當我調試我的代碼時,我通常會寫 console.log('execute blabla', data) 來讓自己確信我在該行中的代碼正在以正確的順序運行和加載。 另外,不要忘記在功能完成后刪除console.log

並且,關閉 sessionStorage 中的選項卡/窗口清除對象,如此處所述https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM