HTML5 Web存储 - 存储JSON数据然后检索它

时间:2014-07-20 17:10:28

标签: javascript html5

在我的应用程序的主页上,我正在进行AJAX调用,以获取应用程序各个部分所需的大量数据。该调用如下:

var url = "/Taxonomy/GetTaxonomyList/"
$.getJSON(url, { includeOverrides: true }, function (jsonData) {
}).success(function (jsonData) {
    sessionStorage.taxonomyWithOverrides = jsonData;
}).fail(function (jqXHR, textStatus, errorThrown) {
   ...
});

这个AJAX调用正在调用一个返回JSONResult的C#方法。这部分似乎工作正常,因为我得到了我期望的数据。

在另一个页面中,我试图按如下方式读取这些数据:

var taxonomy = [];

if (typeof (Storage) !== "undefined") {
    jsonData = sessionStorage.taxonomyWithOverrides;

    $.each(jsonData, function (key, data) {
        taxonomy.push(data.species);
    })
} else {
    alertify.alert("Storage not supported");
}

但是,我收到以下JavaScript错误:

未捕获TypeError:无法使用'in'运算符在[object Object]中搜索'182782', [object Object],...

显然我做错了什么。但是,我没有很多这方面的经验,所以我不确定在哪里看。

这是我的c#方法,它返回JSON数据:

public JsonResult GetTaxonomyList(bool includeOverrides)
{
    try
    {
        var taxonomyList = this.TaxonomyData.GetList(this.AccountRowId,0,string.Empty,true, includeOverrides)
            .Select(row => row.CommonName + " - " + row.ScientificName)
            .ToList();

        var jsonList = (from species in taxonomyList
                        select new { species }
                        ).OrderBy(row => row.species);

        return Json(jsonList, JsonRequestBehavior.AllowGet);
    }
    catch (System.Exception exception)
    {
        ...;
    }
}

1 个答案:

答案 0 :(得分:1)

你存储了一个字符串,当你从存储中取回它时你必须将它解析回一个对象,因为$.each不能处理字符串,但是对象和数组

var taxonomy = [];

if (typeof (Storage) !== "undefined") {
    jsonData = JSON.parse( sessionStorage.taxonomyWithOverrides  || '[]');

    $.each(jsonData, function (key, data) {
        taxonomy.push(data.species);
    })
} else {
    alertify.alert("Storage not supported");
}

我假设你有一个可链接的stringify()方法,否则改变

jsonData.stringify();

JSON.stringify(jsonData);