5

我想缓存从服务器接收到的数据,以便执行最少数量的 PHP/MySQL 指令。我知道缓存选项是自动为 $.ajax() 设置的。但是,每次调用 $.ajax() 时,我都会看到 MySQL 指令,即使 postdata 与先前调用中的相同。我错过了什么吗?缓存从服务器接收到的数据的最佳方法是什么?这是我的代码:

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 回答