如何缓存从Ajax调用收到的数据?

时间:2012-05-01 15:20:40

标签: jquery ajax caching

我想缓存从服务器收到的数据,以便执行最少数量的PHP / MySQL指令。我知道为$ .ajax()自动设置缓存选项。但是,即使postdata与之前的调用相同,每次调用$ .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);
    }
});

3 个答案:

答案 0 :(得分: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的请求,则除非将其从缓存中删除,否则不会发出新请求。

答案 1 :(得分: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();

答案 2 :(得分:0)

您必须添加缓存参数,例如:

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