2013-01-03 4 views
1

아래 JS 코드가 제대로 작동하지만 모든 클릭 이벤트에 대해 서버에 POST 요청을 보냅니다. 아래의 AJAX 게시 응답을 어떻게 캐시 할 수 있습니까? 이상적으로 캐시는 JS 변수로 저장해야합니다. 캐시에 이미로드되어 있으면 POST가 표시되지 않고 표시됩니다. 아직로드되지 않은 경우 POST 요청을 수행하고 캐시에 저장 한 다음 표시합니다. Jquery에서 AJAX 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)); 
?> 

사람이 몇 가지 예제 코드를 제공 할 수있는 경우

시작하기 위해, 나는 그것을 기꺼이 감사하겠습니다. 감사. 그런 다음

var cacheObj = {}; 

: 당신이 (가 페이지를 다시로드하면, 캐시가 더 이상 존재하지 않도록)에 JS 내에서 캐시하려면

답변

2

, 나는 객체를 생성하고 결과를 저장하는 것 당신이 요청을 보내려고있을 때 :

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(); 

} 

이 안된를, 그러나 당신은 생각을해야합니다 :)