情境:
MVC网页获取包含大量数据的JSON对象。点击按钮(有许多按钮安静)我想重用这个JSON对象并选择所需的JSON属性(不向服务器发出请求)。
不是HTML5 因此无法使用浏览器本地存储。目前我正在将JSON对象存储在GLOBAL变量上并重新使用它。
是否有任何优雅的选项可用于存储和重用客户端返回的JSON对象?
答案 0 :(得分:3)
只需缓存数据。没有必要将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请求。
答案 1 :(得分:2)
Jakubs回答的另一个选择是创建一个全局变量,您可以在页面上更新和检索它。
Global variables get attached to the window object,所以请在<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>
答案 2 :(得分:1)
您可以将对象存储在某个元素的data-属性中 - 最好是用于代表您的数据的页面部分的容器(表格,网格):
var json = {};
$('#mygrid').data('mydata', json);
您可以稍后检索
var json = $('#mygrid').data('mydata')
jQuery data()方法文档:http://api.jquery.com/data/