Aller au contenu

Utiliser un objet dans une requête ajax


bagage

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...