场景:
MVC网页获取具有大量数据的JSON对象。单击按钮(有许多按钮),我想重用这个JSON对象,并选择必需的JSON属性(不向服务器发出请求)。
它是而不是HTML5,所以不能使用浏览器本地存储。目前,我正在全局变量上存储JSON对象并重用它。
是否有任何优雅的选项可用于在客户端存储和重用返回的JSON对象?
发布于 2012-05-20 18:19:03
只需缓存数据。没有必要将JSON存储在全局变量中,我相信您将在MVC应用程序中找到一个位置来对局部变量进行范围设置。您将通过回调为数据实现一个getter函数。通过缓存,它将如下所示:
var getData = (function(){
var cache;
var loading = false;
var callbacks = [];
return function(callback) {
if (typeof cache != "undefined")
callback(cache);
else {
callbacks.push(callback);
if (!loading) {
loading = true;
doSingleHeavyAjaxCall(options, function success(data) {
cache = data;
for (var cb; cb = callbacks.shift();)
cb(cache);
});
}
}
};
})();
然后根据需要经常使用getData(function callback(data){...})
,它只会触发一个ajax请求。
发布于 2012-05-20 17:59:49
Jakubs答案的另一个选项是创建一个全局变量,您可以在页面上随意更新和检索该变量。
全局变量被附加到窗口对象。,所以只需将其写在您的<head>
部分即可。
<script type="text/javascript">
window.jsonData = {};
</script>
然后,无论您在哪里检索数据,只需更新该对象。
<script type="text/javascript">
$.ajax(..., function(data) {
window.jsonData = data;
});
</script>
然后您可以在页面上的代码中随时随地使用它。
<script type="text/javascript">
console.dir(jsonData);
</script>
发布于 2012-05-20 17:37:34
您可以将对象存储在某些元素的数据属性中,最好是用于表示数据(表、网格)的页面中的容器:
var json = {};
$('#mygrid').data('mydata', json);
你可以稍后取回它。
var json = $('#mygrid').data('mydata')
jQuery data()方法文档:http://api.jquery.com/data/
https://stackoverflow.com/questions/10678632
复制相似问题