设想:
MVC 网页获取包含大量数据的 JSON 对象。单击按钮后(有许多按钮),我想重用这个 JSON 对象并选择所需的 JSON 属性(不向服务器发出请求)。
它不是 HTML5,所以不能使用浏览器本地存储。目前,我将 JSON 对象存储在 GLOBAL 变量上并重用它。
是否有任何优雅的选项可用于在客户端存储和重用返回的 JSON 对象?
设想:
MVC 网页获取包含大量数据的 JSON 对象。单击按钮后(有许多按钮),我想重用这个 JSON 对象并选择所需的 JSON 属性(不向服务器发出请求)。
它不是 HTML5,所以不能使用浏览器本地存储。目前,我将 JSON 对象存储在 GLOBAL 变量上并重用它。
是否有任何优雅的选项可用于在客户端存储和重用返回的 JSON 对象?
只是缓存数据。无需将 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请求。
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>
您可以将对象存储在某些元素的 data- 属性中 - 最好是代表您的数据(表格、网格)的页面部分的容器:
var json = {};
$('#mygrid').data('mydata', json);
您可以稍后检索它
var json = $('#mygrid').data('mydata')
jQuery data() 方法文档:http ://api.jquery.com/data/