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