Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Yuri Fontella

Usando o this com ajax

Recommended Posts

Bom dia, tenho essa função que envia votos, como na página me traz mais de um resultado... estou tentando usar o this no beforeSend e no success, para fazer as alterações somente naquele resultado.

 

HTML

<ul class="list-inline pull-right likes" style="margin: 0">
  <li>
    <a href="#" name="up" class="like" id="{id_top}">
      <span class="glyphicon glyphicon-hand-up"></span> {up}
    </a>
  </li>

  <li>
    <a href="#" name="down" class="like" id="{id_top}">
      <span class="glyphicon glyphicon-hand-down"></span> {down}
    </a>
  </li>
</ul>

JS

$('a.like').click(function(){

  var name = $(this).attr('name');
  var id_top = $(this).attr('id');
 
  if(name == 'up'){
    //Like up
    $.ajax({
      url: ''+baseurl+'topicos/up',
      type: 'post', 
      data: { id_top: id_top },
      beforeSend: function(){
        $(this).find("[name=up]").html('<img src="'+baseurl+'assets/img/like.gif" align="absmiddle">');
      },
      success: function(){      
        $.ajax({
          url: ''+baseurl+'services/top_page',
          type: 'post', 
          data: { id_top: id_top },
          success: function(data){
            $(data).each(function(index){
              $(this).find("[name=up]").html('<span class="glyphicon glyphicon-hand-up"></span> '+this.concordar+'');
            })
           }
         })       
       }
     })

  } else ...

O voto até é enviado, mas na página não acontece nada... Se alguém conseguir ver se tem algo errada. Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por causa do escopo, salve o escopo que vc quer:

$('a.like').click(function(){

  var name = $(this).attr('name');
  var id_top = $(this).attr('id');
  var $this = $(this);//essa linha
 
  if(name == 'up'){
    //Like up
    $.ajax({
      url: ''+baseurl+'topicos/up',
      type: 'post', 
      data: { id_top: id_top },
      beforeSend: function(){
        $this.find("[name=up]").html('<img src="'+baseurl+'assets/img/like.gif" align="absmiddle">');
      },

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não entendi o porquê daquela variável que recebe o $(this)... mas de toda forma, continua a mesma coisa... não acontece nada, e no console tbm não apresenta nenhum erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<script type='text/javascript'>
    var a = function(callback)
    {
        
        this.quemSouEu = "A";
        callback();
        
    }
    
    var b = function()
    {
        
        this.quemSouEu = "B";
        
        a(function(){
            
            document.write("Oi, eu sou "+this.quemSouEu);
            
        })
        
    }
    
    b();//chamando o B;
    
</script>

um exemplo genérico para entender o conceito

Compartilhar este post


Link para o post
Compartilhar em outros sites

paulojuchem... Até entendi o seu exemplo e o conceito, mas não entendo como que na minha função não está dando certo.

entao voce nao entendeu o conceito.

o this se refere a quem chamou a funcao e nao quem a criou ou aonde ela foi criada

no meu exemplo a funcao foi criada dentro do B, em seguida passamos a mesma para o A e dentro do A ela foi executada.

 

no caso do jquery, o beforeSend eh chamado pelo jquery, vc so passa a funcao para o jquery chamar, ou seja, o this 'vira' quem executou o beforeSend, assim como o success.

 

O this nunca vai ser quem define uma funcao, mas quem executa.

Se A definir uma funcao e B executa-la, todos os this dentro da funcao definida pelo A irao fazer referencia ao B, pois foi B quem executou a funcao.

Se A definir uma funcao e A chamar a funcao, dai entao o this dentro da funcao fara referencia ao A

 

(obs. nao sei pq os acentos n estao fucionando no meu teclaco)

da uma olhada nisso

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz.. como ficou o seu código depois da minha sugestão ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua sugestão não deu certo... era praticamente o que eu estava fazendo, só que não guardava o this numa variável. Então coloquei a id do voto numa classe, como id é única... tudo certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.