Ajax jquery succès de la portée
J'ai cet appel ajax à un doop.php
.
function doop(){
var old = $(this).siblings('.old').html();
var new = $(this).siblings('.new').val();
$.ajax({
url: 'doop.php',
type: 'POST',
data: 'before=' + old + '&after=' + new,
success: function(resp) {
if(resp == 1) {
$(this).siblings('.old').html(new);
}
}
});
return false;
}
Mon problème est que le $(this).siblings('.old').html(new);
ligne n'est pas ce qu'il est censé faire.
merci..
tous les commentaires/réponses sont votées.
Mise à jour: il semble que la moitié du problème est dans la portée (merci pour les réponses qui m'ont aidé à préciser que), mais l'autre moitié, c'est que je suis en train d'utiliser ajax dans une manière synchrone. J'ai créé un nouveau post
- Whoa Whoa Whoa whoa whoa.
new
est un mot réservé: developer.mozilla.org/en/Core_JavaScript_1.5_Reference/... - Ne vous inquiétez pas nouvelle, elle est appelée à autre chose dans mon code. Seulement il a appelé de nouveau pour rendre le code plus compréhensible pour vous les gars
Vous devez vous connecter pour publier un commentaire.
Tout d'abord
new
est un mot réservé. Vous devez renommer cette variable.Pour répondre à votre question, Oui, vous avez besoin pour économiser de l'
this
dans une variable en dehors de la réussite de rappel, et de référence à l'intérieur de votre succès gestionnaire de code:Ce qui est appelé un fermeture.
var saveit = $(this);
n'a pas fonctionné. Je vais essayer maintenant.. Aussi ne vous inquiétez pas nouvelle, elle est appelée à autre chose dans mon code.new
, j'ai compris beaucoup de choses. 🙂doop
est lui-même en se référant à la attenduthis
. Si vous appelezdoop()
par exemple,this
pointe simplement vers lawindow
objet.new
mot-clé, mais cela ajoute beaucoup trop augmentation du code dans une longue liste à laquelle il est ajouté dynamiquement, chaque var devrait être unique, où, comme dans la réponse ci-dessous, à l'aide decontext: this
t-il une fois et a beaucoup plus souple des cas d'utilisation.Vous devez utiliser le contexte paramètre comme dans http://api.jquery.com/jQuery.ajax/
"ce" sera de transfert pour la réussite de la portée et agira comme prévu.
new
comme noms de variable.this
est lié à l'objet pour lequel l'exécution de la fonction a été appliquée. Que pourrait être une réponse AJAX objet, ou l'objet global (window
), ou quelque chose d'autre (en fonction de la mise en œuvre de$.ajax
.Vous n'avez en effet besoin d'un moyen de capturer la valeur de
this
avant de définir lessuccess
fonction. La création d'une clôture est la façon de le faire. Vous devez définir une variable distincte (par exemple,self
):La
success
fonction de conserver la valeur deself
lorsqu'il est invoqué, et doit se comporter comme prévu.