2013-01-25 6 views
0

J'ai un événement qui appelle la fonction jQuery $.post. Je voudrais accéder à une variable définie à l'intérieur de la fonction $.post et j'ai des problèmes avec cela.

Dans ce cas, j'aimerais accéder à la variable currentId.

$('.notMatching').click(function(){  
    var currentId = this.id; 
    $.post("http://"+ document.domain + baseUrl +"/tables/demo.json", { id: this.id }, 
      function(dat){ 

       alert(currentId); //undefined 

       if(dat['result']==1){ 
        $(this).parent().html('<input type="checkbox" class="first" value="'+this.id+'">'); 
       } 
      } 
    ); 
}); 

Y a-t-il un moyen de le faire? Btw, cet événement est à $(document).ready(function(){ avec beaucoup d'autres événements.

+0

http://remysharp.com/2007/04/12/jquerys-this-demystified/ –

Répondre

3

Vous n'avez pas besoin de faire une cession en faisant quoi que ce soit global ...

$('.notMatching').click(function(){  

    var that = this 
    $.post("http://"+ document.domain + baseUrl +"/tables/demo.json", { id: this.id }, 
      function(dat){ 

       alert(that.id); 

       if(dat['result']==1){ 
        $(this).parent().html('<input type="checkbox" class="first" value="'+that.id+'">'); 
       } 
      } 
    ); 
}); 

cédez votre this variable à that et votre qui sera accessible en appel de succès de $.post

+0

Croyez-vous que c'est mieux que de déclarer l'option de variable globale? – Alvaro

+0

OUI:) ... Je suis personnellement un fan de «éviter globals» mouvement de awesomeness ... :) – AdityaParab

+0

Juste un conseil: Évitez d'utiliser globales et d'embrasser les fonctions de rappel ... :) – AdityaParab

1

Veuillez déclarer la variable globalement!

var currentId = null; 
$('.notMatching').click(function() { 
currentId = this.id; 
$.post("http://" + document.domain + baseUrl + "/tables/demo.json", { 
    id : this.id 
}, function(dat) { 

    alert(currentId); 
    //undefined 

    if (dat['result'] == 1) { 
     $(this).parent().html('<input type="checkbox" class="first" value="' + this.id + '">'); 
    } 
}); 

});

+0

Il est préférable d'éviter les déclarations de variables globales dans les applications JavaScript. –

1

le champ à l'intérieur du rappel est modifié, vous devez conserver

$('.notMatching').click(function(){  
    var currentId = this.id; 
    var that = this; 
    if (currentId) 
     $.post("http://"+ document.domain + baseUrl +"/tables/demo.json", { id: currentId }, function(dat){ 
      if(dat['result']==1) 
       $(that).parent().html('<input type="checkbox" class="first" value="'+currentId+'">'); 
     }); 
    else 
     alert('No Id'); 
}); 
1
var currentId = null; 
var that = this; 
$('.notMatching').click(function() { 
currentId = this.id; 
$.ajax({ 
    'type' : 'POST', 
    'dataType' : 'JSON', 
    'data': {'id':currentId}, 
    'url': "http://" + document.domain + baseUrl + "/tables/demo.json", 
    'success': function(response){ 
    if ((JSON.parse(response)).result === 1) { 
     $(this).parent().html('<input type="checkbox" class="first" value="' + that.id + '">'); 
    } 
    } 
});