Guardar respuesta de llamada ajax en caché

  • Autor Autor Juanjo87
  • Fecha de inicio Fecha de inicio
J

Juanjo87

Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas, estoy intentando guardar la respuesta de una llamada ajax, en la cache.
Estoy desarrollando un script que carga información a través de ajax, pero necesito que me guarde en cache las respuestas, para que cada vez que se solicite la información, no vuelva a hacerme la petición al servidor, y conseguir así una respuesta mas rápida.

El problema es que no encuentro un tutorial en español sobre esto y los que e encontrado no consigo adaptarlo a mi código.
el código simplificado que tengo es así.

En function:

PHP:
<?php


function hover_effect() {
    if ( ! is_numeric( $_POST['post_id']))
        die("Wrong ID!");
    $_POST['post_id'] = abs(intval($_POST['post_id']));
    if ( ! $_POST['post_id'] )
        die("Wrong ID!");
    if(isset($_POST['post_id'])){
        global $post;
        $post =  get_post($_POST['post_id']);
        if ($post!=null){
            setup_postdata($post);
            ?>


<a class="hover_effect" rel="nofollow" href="<?php the_permalink(); ?>">

   <img class="img_licar" title="<?php echo $post->post_title; ?>" src="<?php the_post_thumbnail_url( 'medium' ); ?>"  />

<?php echo excerpt(25); ?>
</a>

			
            <?php
        }
    }
    die();
}

add_action('wp_ajax_hover_effect', 'hover_effect');
add_action('wp_ajax_nopriv_hover_effect', 'hover_effect');
?>

y la llamada jquery la hago asi

PHP:
<script>
function effect_hover(id){
var respuesta;
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";	  	  
var DivContenedor =	$("#effect_hover_box");
	DivContenedor.html("");		



 
    jQuery.post(
		ajaxurl, 
		{
		    'action': 'hover_effect',
			
		    'post_id':   id,
			
		}, 
	
	    function(response){
			
respuesta = response;

if(respuesta)
    {
   
		
        DivContenedor.html(respuesta);
			
    }
    else{
      /*  alert("la respuesta fue falso");*/
    }
....
</script>

Agradezco cualquier ayuda
 
Última edición:
J

jarri1999

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Las peticiones POST no las puedes guardar en cache, tendrias que cambiar a GET y agregar un encabezado de cache-control
 
J

Juanjo87

Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Vale, voy a ver que encuentro y voy comentando, gracias
 
J

jarri1999

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
si quieres guardar prueba usando el sessionStorage del navegador, usa una condicional para comprobar si existen los recursos en el sessionStorage si el recurso no esta almacenado, lo sirves por ajax y lo guardas, ahora en la próxima petición ya debería existir por lo que no harías la petición.

sessionStorage o localStorage, lo que veas mas conveniente.
 
Última edición:
J

Juanjo87

Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
gracias jarri pero creo que esto se me esta quedando un poco grande, pues no me atrevo a cambiar de type: POST A GET pues me tira un erro.
Serias tan amable de ayudarme con el codigo?

- - - Actualizado - - -

pues de momento sigo igual.
Nadie me puede ayudar?
 
J

Juanjo87

Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Alguien puede aportar algo, por favor, algun tutorial, algunos ejemplos.
Estoy muy liado, no se si debo de hacer esto con cookie, localstorage, sesionstorage...tengo un lio de mil demonios...

- - - Actualizado - - -

esto es lo ultimo que he intentado, el codigo sige funcionando pero no me almacena nada en cache y me vuelve a repetir el proceso de carga, asi que es como si nada...

PHP:
<script>

function effect_hover(id){
var respuesta;  
var DivContenedor =	$("div#effect_hover_box");
	DivContenedor.html("");		

 
    
 var cacheObj = {};
 
 if (cacheObj.postID_from_ajax){

    display(cacheObj.postID);

}else{

 
    $.post(
	     MyAjax.url, 
{
			'nonce' : MyAjax.nonce,
		    'action': 'hover_effect',
		    'post_id':   id,
			
		}, 		 

		
		function(response) {

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

    });
}

function display(response){

   DivContenedor.html(response);

}
		
					
 


}

</script>

- - - Actualizado - - -

jarri, usted sabe montar el codigo?
Puede ayudarme si es asi?

- - - Actualizado - - -

Ajax content change with localstorage caching - Jonas van Ineveld
esto es un ejemplo de lo que quiero hacer, pero no lo consigo, a ver si alguien me echa una mano
 
Última edición:
J

Juanjo87

Gamma
Diseñador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
aun sigo dándole vueltas a esto, y no consigo nada, si alguien en cualquier momento me puede ayudar se lo agradezco.
 
Atrás
Arriba