2012-05-01 9 views
5

サーバーから受け取ったデータをキャッシュして、実行されるPHP/MySQL命令の数が最小限になるようにしたいと思います。私はキャッシュオプションが$ .ajax()に対して自動的に設定されていることを知っています。しかし、postdataが以前の呼び出しと同じであっても、$ .ajax()が呼び出されるたびにMySQLの指示が表示されます。何か不足していますか?サーバーから受信したデータをキャッシュする最良の方法は何ですか?Ajaxコールから受け取ったデータをキャッシュする方法は?

$.ajax({ 
... 
... 
cache : true 
}); 

答えて

4

ここが理念です。もちろん、あなたのニーズにそれを微調整してください。

function getAjaxData(){ 
    var $node = $('#note_container'); 
    if ($node.data('ajax-cache').length == 0) { 
     $.ajax({ 
      // do stuff. 
      success: function(data){ 
       // Add dialog content 
       $node.html(data).data('ajax-cache',data).dialog(); 
      } 
     }); 
    } else { 
     $node.html($node.data('ajax-cache')).dialog(); 
    } 
} 
getAjaxData(); 
+0

downvoteの理由は?この回答は役に立ちませんでしたか? – AlienWebguy

+0

ブラウザは、キャッシュすることができます。 EXACTの同じ要求を2回実行しようとすると、それはそれ自身のキャッシュを使用するだけです。ブラウザがあなたのためにキャッシュを処理するときに、なぜホイールを再発明するのですか? – Adam

+0

わかりませんが、私にとっては良いコンセプトのようです。それを要素に格納することで、要素がjQueryによって削除されると自動的に消去されます。 –

0

:ここに私のコードですidはすでに発生していますが、キャッシュから削除しない限り、新しいリクエストは作成されません。

+0

デフォルトではcacheパラメータはtrueです。確かに、あなたが示唆したように私はそれを設定しました。私はまだMySQLの指示がサーバーによって処理されているのを見ています。 – Stephen305

4
私はキャッシュ自身扱うでしょう

:要求とは言った場合、

// declare this on global scope 
var ajaxCache = {}; 
... 

if (!ajaxCache[this.id]) { 
    ajaxCache[this.id] = $.ajax({ 
     type: "POST", 
     url: "get_note.php", 
     data: {'pid':'<?php echo $project_id;?>','record_id':this.id} 
    }); 
} 

ajaxCache[this.id].done(function(){ 
    if (data != '0') { 
     // Add dialog content 
     $('#note_container').html(data); 
     $('#note_container').dialog(); 
    } else { 
     alert('woops'); 
    } 
}); 

この方法をあなたが好きなキャッシュパラメータを追加する必要が

var postdata = {'pid':'<?php echo $project_id;?>', 
       'record_id':this.id}; 

$.ajax({ 
    type: "POST", 
    url: "get_note.php", 
    data: postdata 
}).done(function(data){ 
    if (data != '0') { 
     // Add dialog content 
     $('#note_container').html(data); 
     $('#note_container').dialog(); 
    } else { 
     alert(woops); 
    } 
}); 
+0

ニース。これも機能します。 – Stephen305

+0

キャッシュされたデータを返すときにdeferred.done()メソッドが再度呼び出されますか? – sivann

+0

はnoと呼ばれますが、それ以上のコールバックをアタッチすることができます。コールバックはすでに解決されているため、すぐに起動します。 –

関連する問題