Preciso parar função ajax?

  • Autor Autor Juanjo87
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
J

Juanjo87

Gamma
Diseñador
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
Hola, estoy teniendo un problema de hace algún tiempo que me trae loco..

Pues tengo una galería de imágenes, que al hacer click en una imagen, a través de ajax, traigo su contenido hasta un div. Hasta aquí todo bien, pero, si pincho en una imagen, y si antes que esta termine de cargar su contenido, pincho en otra, no se cancela la petición anterior y me hace algo extraño, me aparece el contenido de la primera imagen a la que hice click, y acto seguido me muestra el contenido de la segundo imagen que clickee.

¿Como puedo resolver esto? he intentando con .abort() pero no me funciono.

- - - Actualizado - - -

Esta es la función que se ejecuta al hacer click:

PHP:
<script>

function effect_hover(id){

var DivResponse = $("div.response_effect");
	
        DivResponse.html("<div class='uil-ring-css' style='transform:scale(0.37); margin-top: 200px;'><div></div></div>");

        jQuery.post(
		 MyAjax.url, 
		{
			'nonce' : MyAjax.nonce,
		    'action': 'hover_effect',
		    'post_id':   id,
		}, 
	
        function(response){			
       
               if(response)
               {
		    DivResponse.html(response);
               }
               else{
			
               }
       });
}
</script>


Este código llama a la función y se repite tantas veces como imágenes contenga la galería:

PHP:
<a class="licar_linck" data-title="<?php echo $post->post_title; ?>" data-id="<?php the_ID(); ?>" href="<?php the_permalink(); ?>"
	
	onclick="effect_hover('<?php echo $post->ID;?>','hover_effect','#effect_hover_box'); return false;"  
	
></a>
 
Última edição:
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Prueba a utlizar el .done ya que la funcion de su interior solo se ejecutara cuando la peticion haya finalizado. Da la sensacion como si las dos funciones se concatenaran o algo similar >.<.
Prueba con esto
Inserir CODE, HTML ou PHP:
       $.post( MyAjax.url,{
            'nonce' : MyAjax.nonce,
            'action': 'hover_effect',
            'post_id':   id,
        })
+	.done(function( response ) {
   	   if(response){
           	DivResponse.html(response);
            }
            else{
            
            }	
+	});

De todas formas si eso no te funciona lo que puedes hacer es analizar con un booleano a la entrada del metodo si se puede realizar la peticion ajax, si el booleano es falso pues que se salte la funcion ajax y punto. El true lo pones dentro de la funcion del .done. El booleano evidentemente tendra que ser una global o similar para que funcion la vea desde fuera.
 
Pon en la función

Inserir CODE, HTML ou PHP:
async=false
 
Pon en la función

Inserir CODE, HTML ou PHP:
async=false

Esa opcion esta ya deprecated. Si te fijas en la consola del navegador te lo dice continuamente xD.
 
pues acabo de probar lo que me comentas rau2191, pero no hace nada. se ejecuta = con el done que sin el y no me corrige el fallo
 
Acabo de repasar mas detenidamente tu código.
Tu código esta mal.
--Creas una funcion con 1 parámetro: function effect_hover(id){

--Y la llamas con tres parámetros: onclick="effect_hover('<?php echo $post->ID;?>','hover_effect','#effect_hover_box');

Por otra parte pienso que rau2191 tiene razón async es "desanconsejada" y con .done deberia funcionar.
 
Última edição:
Acabo de repasar mas detenidamente tu código.
Tu código esta mal.
--Creas una funcion con 1 parámetro: function effect_hover(id){

--Y la llamas con tres parámetros: onclick="effect_hover('<?php echo $post->ID;?>','hover_effect','#effect_hover_box');

Por otra parte pienso que rau2191 tiene razón async es "desanconsejada" y con .done deberia funcionar.

No me habia percatado yo sobre lo de los atributos xD. Teniendo en cuenta ese error, no deberia ni de estar entrando en la funcion:witless:
 
Vale, acabo de probarlo así

PHP:
onclick="effect_hover('<?php echo $post->ID;?>'); return false;

Funciona bien, pero me sigue pasando lo mismo.
 
Vale, acabo de probarlo así

PHP:
onclick="effect_hover(''); return false;

Funciona bien, pero me sigue pasando lo mismo.
Pues una idea que te doy para esto es utilizar la función .Off(). Con esta misma desactiva los eventos click en la imágenes y lo vuelves a activar con on() en .done(). Con esto te aseguras que la petición ajax ha terminado y que mientras tanto nadie ha podido hacer click.

Enviado desde mi Power mediante Tapatalk
 
Voltar
Topo