1

以下に完全に機能するJSコードがありますが、クリックイベントごとにサーバーにPOSTリクエストを送信しています。以下のAJAX投稿応答をキャッシュするにはどうすればよいですか?理想的には、キャッシュはJS変数として保存する必要があります。すでにロードされてキャッシュに存在する場合は、(POSTを実行せずに)表示されます。まだロードされていない場合は、POSTリクエストを実行し、キャッシュに保存してから表示します。

jQuery( document ).ready( function( $ ) {
var _doing_ajaxx = false;
$('.toolbar').remove();
$('#mydiv #frontend').click(function() {    
    if (_doing_ajaxx) {
        return false;
    }

    var title_shortcode = $(this).text();


    var insert_namex=  $(this).attr('class');


    var titlejsselector=title_shortcode.replace(/ /g,'');


    var buttonval=$('#'+titlejsselector+' input').val();

    if (buttonval=='Minimize')  {
    //stop ajax request if button is set

        $('#'+titlejsselector+' div').remove();
        $('#'+titlejsselector+' input').remove();

    } else {
    //initialize ajax variables

    var data = {
            action: 'test_ajax_response',
            test_ajax_response_nonce: the_ajax_script.test_ajax_response_nonce, 
            postID_from_ajax : the_ajax_script.postid_to_ajax,
            insert_name_ajax: insert_namex,
            title_ajax: title_shortcode
        };      
    //do an ajax request
    _doing_ajaxx = true;
    $.post(the_ajax_script.ajaxurl, data, function(response) {

        $(this).next().slideToggle();   
        $('#mydiv #'+titlejsselector).append(response+"<input type='hidden' id='minimizebutton' value='Minimize'>");
        SyntaxHighlighter.highlight();

        $('.toolbar').remove();
        _doing_ajaxx = false;
    });

    }
    //return false;
}); 


});

PHPを使用してこのコードを追加しようとしましたが、機能しません。

 <?php
 header("Cache-Control: private, max-age=$seconds");
 header("Expires: ".gmdate('r', time()+$seconds));
 ?>

誰かが始めるためにいくつかのサンプルコードを提供することができれば、私はそれを喜んで感謝します。ありがとう。

4

1 に答える 1

2

JS 内からキャッシュする場合 (つまり、ページをリロードすると、キャッシュは存在しなくなります)、オブジェクトを作成して結果を保存します。

var cacheObj = {};

次に、リクエストを送信しようとしているときに:

if (cacheObj.postID_from_ajax){

    display(cacheObj.postID);

}else{

    // Do your ajax call
    $.post(the_ajax_script.ajaxurl, data, function(response) {

        _doing_ajaxx = false;
        cacheObj.postID_from_ajax = response;
        display(response);

    });
}

function display(response){

    $('#mydiv #frontend').next().slideToggle();   
    $('#mydiv #'+titlejsselector).append(response+"<input type='hidden' id='minimizebutton' value='Minimize'>");
    SyntaxHighlighter.highlight();

    $('.toolbar').remove();

}

テストされていませんが、アイデアを得る必要があります:)

于 2013-01-03T11:00:01.287 に答える