5

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

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);
    }
});
4

3 に答える 3

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');
    }
});

このようにして、前述の ID を持つリクエストが既に発生している場合、キャッシュから削除しない限り、新しいリクエストは作成されません。

于 2012-05-01T15:25:03.700 に答える
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();
于 2012-05-01T15:27:03.870 に答える
0

次のようなキャッシュ パラメータを追加する必要があります。

$.ajax({
...
...
cache : true
});
于 2012-05-01T15:23:58.620 に答える