如何通过 id/key 从 sessionStorage 访问记录?

How to access record from sessionStorage by id/key?

我有数据保存在 sessionStorage 中,这里是我如何在 sessionStorage 中保存数据的示例。

$.ajax({
    type: 'POST',
    url: 'Components/Functions.cfc?method='+cfMethod,
    data: formData,
    dataType: 'json'
}).done(function(obj){
    sessionStorage.setItem('Books',JSON.stringify(obj.DATA));
}).fail(function(jqXHR, textStatus, errorThrown){
    alert('Error: '+errorThrown);
});

一旦记录保存在 sessionStorage 中,它们将如下所示:

{
  "14": {
    "COMMENTS": "",
    "RECORDID": 14,
    "NAME": "Decorah Sector",
    "AGENCY": "01",
    "CODE": "011A"
  },
  "15": {
    "COMMENTS": "",
    "RECORDID": 15,
    "NAME": "Waukon Field",
    "AGENCY": "01",
    "CODE": "011B"
  },
  "16": {
    "COMMENTS": "Test 524",
    "RECORDID": 16,
    "NAME": "New Hampton",
    "AGENCY": "01",
    "CODE": "011C"
  }
}

如您所见,每条记录都有唯一键,一旦用户决定编辑记录,我所要做的就是从 sessionStorage 中提取数据并传递与唯一键匹配的 id。这是我的编辑功能的示例:

function editBook() {
    var recordID = $(this).closest('tr').attr('id'), // This id will be retrieved from presentation table. Each row has unique id that match sessonStorage.Books records.
        bookRecord = JSON.parse(sessionStorage.Books[recordID]);
        console.log(bookRecord); //For testing purpose.
    if(bookRecord){
        $.each(regionRecord, function(name, value){
            var elementName = $('[name="'+'frmSave_'+name.toLowerCase()+'"]'),
                elementType = elementName.prop('type'),
                elementVal = $.trim(value);

            switch(elementType){
                case 'select-one':
                    elementName.val(elementVal);
                    break;
                case 'textarea':
                    elementName.val(elementVal);
                    break;
                default:
                    elementName.val(elementVal);
            }
        });
    }
}

出于某种原因,在我 console.log() bookRecord 之后,我没有获取我在 sessionStorage 中传递的特定 id 的数据。我不确定我的语法是否正确或其他问题。我正在执行与 JS 对象用于基于唯一键访问记录的相同步骤。如果有人看到我的代码中的问题在哪里,请告诉我。

该对象是 JSON.parse() 的结果,您需要将索引放在那里。

bookRecord = JSON.parse(sessionStorage.Books)[recordID];

bookRecord = JSON.parse(sessionStorage.Books[recordID]);

应该是

bookRecord = JSON.parse(sessionStorage.Books)[recordID];

因为你想访问你从JSON解析的对象的记录。