场景:如何重复使用JSON对象
的MVC网页获取JSON对象,具有大量数据。点击按钮(有一些按钮安静),我想重用这个JSON对象并选择所需的JSON属性(不需要向服务器发送请求)。
这不是HTML5因此无法使用浏览器本地存储。此刻我将JSON对象存储在GLOBAL变量上并重新使用它。
是否有可用的存储和再利用返回的JSON对象客户端的任何优雅的选择吗?
场景:如何重复使用JSON对象
的MVC网页获取JSON对象,具有大量数据。点击按钮(有一些按钮安静),我想重用这个JSON对象并选择所需的JSON属性(不需要向服务器发送请求)。
这不是HTML5因此无法使用浏览器本地存储。此刻我将JSON对象存储在GLOBAL变量上并重新使用它。
是否有可用的存储和再利用返回的JSON对象客户端的任何优雅的选择吗?
您可以将对象存储在某个元素的数据 - 属性 - 最好容器代表您的数据(表格)页面的一部分:
var json = {};
$('#mygrid').data('mydata', json);
您可以在以后检索
var json = $('#mygrid').data('mydata')
jQuery的数据()方法的文档:http://api.jquery.com/data/
另一个选项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>
这种方法和全局变量有什么区别。 –
@nilpun:这种方法是“使用全局变量”? – Bergi
只是缓存数据。没有必要将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请求。
这种方法与全局变量相比具有适当的名称空间,这有什么好处 –
在我的例子'getData'中,它只有一个(某处暴露的)接口方法。每当你需要这些数据时,你做的每件事都需要做。公共缓存有什么好处? – Bergi
你是什么意思重用?在页面刷新之间呢? –
假设您在页面刷新后不需要重新使用数据,则全局变量是完全可以接受的方式。虽然使用某种名义间距方案(对于所有的代码)是更好的:你把这些变量的“全球”的名字空间内...... – nnnnnn
@JakubKonecki,重用一个页面上。刷新后不刷新将触发服务器请求:-) –