2010-08-03 5 views
2

J'utilise l'appel AJAX raccourci, $.get mais lorsque j'essaie de référencer une variable avec $(this), jQuery me dit que c'est undefined.

Voici le bloc de code:

$('.replaceWithObject').live('click', function(event) { 
    var cid = $(this).find('input').val(); 
    $.get('GetVideoComment.ashx?cid=' + cid, function(data) { 
     $(this).html(data); 
    }); 
}); 

Il trouve le cid très bien, comme $(this) est disponible avant la $.get. À l'intérieur du .get$(this) est indéfini. Définir un var à $(this) avant le get ne fonctionne pas non plus?

getVideoComment.ashx?cid=628 fonctionne, il renvoie un objet flash. Le problème est que $(this) est indéfini à l'intérieur du get.

Une idée sur la façon de faire ce que je veux faire ici? Ou ce que je fais mal?

Répondre

4

Vous devez mettre en cache votre sélection initiale afin qu'elle existe lorsque votre rappel se déclenche.

$('.replaceWithObject').live('click', function(event) { 
    var $this = $(this); 
    var cid = $this.find('input').val(); 
    $.get('GetVideoComment.ashx?cid=' + cid, function(data) { 
     $this.html(data); 
    }); 
}); 
2

Essayez ceci:

$('.replaceWithObject').live('click', function(event) { 
    var that = $(this); 
    var cid = that.find('input').val(); 
    $.get('GetVideoComment.ashx', {'cid': cid}, function(data) { 
     that.html(data); 
    }); 
}); 

Le problème est que this à l'intérieur de la fonction get tout n'est plus .replaceWithObject Si vous mettez en cache la présente sur l'événement, cliquez et utilisez ce cache alors il fonctionnera pour toi.

2

Comme les données renvoyées semble être HTML, vous pouvez aussi utiliser load():

Charger des données à partir du serveur et de placer le code HTML retourné dans l'élément adapté.

$('.replaceWithObject').live('click', function(event) { 
    var cid = $(this).find('input').val(); 
    $(this).load('GetVideoComment.ashx?cid=' + cid); 
    // or $(this).load('GetVideoComment.ashx', {cid: cid}); 
}); 
+0

Remerciements +1. Cela fonctionne, et a plus de sens. Mais je ne comprenais pas pourquoi j'étais hors de la portée de ça dans le get ... N'en faites pas encore. = ( – Jason

+0

@Blankasaurus: 'this' est une variable spéciale et est définie sur l'objet, une méthode est appelée On n'appelle pas get()' sur un élément mais sur l'objet 'jQuery'. 'this' ne peut pas être mis à l'élément, car il ne sait rien à ce sujet. –