sessionStorage返回undefined

时间:2015-12-21 19:59:03

标签: jquery typescript kendo-grid session-storage

我有使用sessionStorage将数据从一个视图移动到另一个视图的客户端应用程序。我的代码是:

$("#reportGrid").find("input:checked").each(function () {
    rows.push($(this).closest('tr'));

    var dataItem = grid.dataItem($(this).closest('tr'));
    console.log("TicketNumber => " + dataItem.ticketNumber + " " + dataItem.lineNumber);

    // store dataItem in session Storage;
    sessionStorage.setItem('selectedRecords', JSON.stringify(dataItem));
    var retrievedObject = JSON.parse(sessionStorage.getItem('selectedRecords'));

    console.log("Begin -----------");
    console.log("userSelectedRecords => " + retrievedObject[0].ticketNumber);
    console.log("End -----------");
})  

然而,行console.log("userSelectedRecords => " + retrievedObject[0].ticketNumber);返回

  

未捕获的TypeError:无法读取未定义的属性'ticketNumber'

如何显示上一个视图中的数据?

1 个答案:

答案 0 :(得分:1)

读取您希望循环遍历项目数组的代码并获取所有已检查的代码。目前,您正在循环检查已检查的项目并将每个项目存储到会话变量中,并继续对其进行书写。当你阅读它时,你将只有一个项目。如果这是您想要的,那么您只需要引用该对象,而不是执行数组语法。

console.log("userSelectedRecords => " + retrievedObject.ticketNumber);

但我认为这不是你想做的。我想你想要一个用户选择的元素数组。要拥有一个数组,您需要构建列表,而不是在循环结束时保存整个数组。

//temp holding place for the data
var records = [];    
$("#reportGrid").find("input:checked").each(function () {
    var dataItem = grid.dataItem($(this).closest('tr'));
    records.push(dataItem);  //push the element
});
//save it to localstorage
sessionStorage.setItem('selectedRecords', JSON.stringify(records));

//now your syntax would work
var retrievedObject = JSON.parse(sessionStorage.getItem('selectedRecords'));
if (retrievedObject.length) { //make sure we have at least one item
    console.log("userSelectedRecords => " + retrievedObject[0].ticketNumber);
}