Javascript 如何通过id/键从会话存储中访问记录?

Javascript 如何通过id/键从会话存储中访问记录?,javascript,json,sessionstorage,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(o

我有保存在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"
  }
}
正如您所看到的,每个记录都有唯一的键,一旦用户决定编辑记录,我所要做的就是从会话存储中提取数据,并传递匹配唯一键的
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);
            }
        });
    }
}

由于某种原因,在I
console.log()
bookRecord之后,我没有获得在会话存储中传递的特定
id
的数据。我不确定我的语法是否正确,或者可能是其他问题。我遵循的步骤与JS对象基于唯一键访问记录时使用的步骤相同。如果有人看到我的代码中的问题在哪里,请让我知道

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

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

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

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

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

您确定您的意思不仅仅是JSON(将标记悬停在问题中)?我尝试过在javascript对象中保存obj.DATA,如
var books={}并且我能够访问这样的记录
books[recordID]
,它将检索特定的行/数据集。这很有效!非常感谢。有没有办法在sessionStorage对象中插入/更新记录?与我按键拉取记录的操作相同,但这次我想插入/更新。将
JSON.parse()
的结果分配给一个变量,更新该对象,然后将
JSON.stringify(该变量)
存储在会话存储中。既然如此,我想这是在会话存储中更新/插入记录的唯一方法,使用sessionStorage而不是JS对象有什么好处吗?sessionStorage的目的是在页面之间切换或重新加载页面时保留变量的值。我更多地使用它来向服务器保存一些点击。所以,当用户第一次搜索记录时,我将它们保存在存储器中。然后,当我需要/编辑该数据时,我会从存储器中提取记录。我在争论我应该使用JS object还是sessionStorage。有没有办法在sessionStorage中更新/插入新的/现有的记录?@espresso_coffee与分配任何对象值的方式相同,您只需设置键=现有键。