Webmaster Hub: Utiliser un objet dans une requête ajax - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Utiliser un objet dans une requête ajax avec jQuery

#1 L'utilisateur est hors-ligne   bagage 

  • Groupe : Membre
  • Messages : 3
  • Inscrit(e) : 20-mai 10
  • Genre:Homme

  Posté 27 août 2010 - 20:14

Bonjour,

Voici ce code:
$('.formEditComment').submit(function() {
	var commentContent = $(this).next().text();
	var taEditComment = $(this).find('textarea').val();
	var idComment = $(this).find('.idComment').val();
	if(jQuery.trim(taEditComment) && commentContent != taEditComment)
	{
		var dataString = 'taEditComment='+ taEditComment + '&idComment='+ idComment +'&ajaxVideoEditComment=1&ajaxje=1';
		$.ajax({
		   type: "POST",
		   url: "ctl/videos.ctl.php",
		   data: dataString,
		   cache: false,
		   success: function(html){ 
				$(this).find('textarea').empty();
				$(this).hide();
				$(this).next().empty();
				$(this).next().append(html);
				$(this).next().effect("slide", { direction: "down" }, 500, function() { $(formEditComment).next().show(); });
			    },
	           error: function(msg){
				alert('The request failed, please try again')
			  }
		});
		return false;
	}
	else
	{
		return false;
	}
});


La plupart des actions marche sauf quand on en vient à traiter la fonction "success" de la requête ajax, aucune des actions concernant celle-ci ne marche, il semble que l'appel à l'objet this ne soit pas le même à l'intérieur d'une requête AJAX qu'à l'extérieur...

Par exemple :

 var taEditComment = $(this).find('textarea').val(); 


je veux cacher ça dès que la requête ajax réussie comme je l'ai fait ci dessous :

 $(this).find('textarea').empty(); 


Pourquoi ça ne marche pas à l'intérieur de la requête ajax alors qu'à l'extérieur c'est ok ?

Comment faire ?

Merci d'avance.
0

#2 L'utilisateur est hors-ligne   Ernestine 

  • Groupe : Fondatrice
  • Messages : 1 034
  • Inscrit(e) : 21-août 03
  • Genre:Femme

Posté 27 août 2010 - 23:42

Salut,

Le $(this) dans ta fonction de succès Ajax ne fait pas référence au formulaire, puisque tu es dans la fonction.
Il faut que tu attribues un id à ton textarea (et les autres éléments du formulaire), ce qui te permettra de la manipuler à l'intérieur de ta fonction :)
0

#3 L'utilisateur est hors-ligne   bagage 

  • Groupe : Membre
  • Messages : 3
  • Inscrit(e) : 20-mai 10
  • Genre:Homme

Posté 28 août 2010 - 01:17

Voir le messageErnestine, le 27 août 2010 - 23:42, dit :

Salut,

Le $(this) dans ta fonction de succès Ajax ne fait pas référence au formulaire, puisque tu es dans la fonction.
Il faut que tu attribues un id à ton textarea (et les autres éléments du formulaire), ce qui te permettra de la manipuler à l'intérieur de ta fonction :)


Merci de ta réponse, je m'en doutais bien pour ce $this, merci de ta confirmation, cependant, j'utilise la classe car j'ai plusieurs formulaire sur une seule page sinon j'aurai bien évidemment utiliser un id.
0

#4 L'utilisateur est hors-ligne   Ernestine 

  • Groupe : Fondatrice
  • Messages : 1 034
  • Inscrit(e) : 21-août 03
  • Genre:Femme

Posté 28 août 2010 - 13:34

Dans la documentation de jQuery, à la fonction $.ajax, on lit :

Citation

context

This object will be made the context of all Ajax-related callbacks. For example specifying a DOM element as the context will make that the context for the complete callback of a request, like so:

$.ajax({ url: "test.html", context: document.body, success: function(){
$(this).addClass("done");
}});

Page : http://api.jquery.com/jQuery.ajax/

Ce paramètre context devrait permettre de répondre à ton problème, je pense... piste à creuser.
0

#5 L'utilisateur est hors-ligne   bagage 

  • Groupe : Membre
  • Messages : 3
  • Inscrit(e) : 20-mai 10
  • Genre:Homme

Posté 28 août 2010 - 14:29

Salut, oui c'est exactement ce que je cherchai, mille merci. J'ai mit context : this pour qu'il prennent l'objet courant, donc la classe .formEditComment dans mon code et ça marche.
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)