在我的应用程序的主页上,我正在进行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)
{
...;
}
}
答案 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);