如何通过ID /密钥从sessionStorage访问记录?

时间:2018-07-23 19:09:58

标签: javascript json sessionstorage

我有保存在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对象用于访问基于唯一键的记录相同的步骤进行操作。如果有人在我的代码中看到问题所在,请告诉我。

2 个答案:

答案 0 :(得分:1)

该对象是JSON.parse()的结果,您需要在此处放置索引。

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

答案 1 :(得分:1)

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

应该是

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

因为您要访问从JSON解析的对象的记录。