5

シナリオ:

MVC Web ページは、大量のデータを含む JSON オブジェクトを取得します。ボタンをクリックすると (多数のボタンが表示されません)、この JSON オブジェクトを再利用し、必要な JSON プロパティを選択したいと思います (サーバーへのリクエストは行いません)。

HTML5ではないため、ブラウザのローカル ストレージを使用できません。現時点では、JSON オブジェクトを GLOBAL 変数に保存して再利用しています。

クライアント側で返された JSON オブジェクトを保存して再利用するための洗練されたオプションはありますか?

4

3 に答える 3

3

データをキャッシュするだけです。JSON をグローバル変数に格納する必要はありません。ローカル変数のスコープを設定する場所が MVC アプリケーション内にあるはずです。コールバックを使用してデータのゲッター関数を実装します。キャッシュを使用すると、次のようになります。

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){...})なだけ頻繁に使用すると、1 つの ajax リクエストのみがトリガーされます。

于 2012-05-21T02:19:03.840 に答える
2

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-21T01:59:49.403 に答える
1

オブジェクトをいくつかの要素の data- 属性に格納できます。できれば、データを表すページの一部 (テーブル、グリッド) のコンテナーです。

var json = {};

$('#mygrid').data('mydata', json);

後で取得できます

var json = $('#mygrid').data('mydata')

jQuery data() メソッドのドキュメント: http://api.jquery.com/data/

于 2012-05-21T01:37:34.797 に答える