_doop.php
_へのこのajax呼び出しがあります。
_ 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;
}
_
私の問題は、$(this).siblings('.old').html(new);
行が想定どおりに機能していないことです。
ありがとう..すべての有益なコメント/回答が投票されます。
更新:問題の半分はスコープであったようです(それを明確にするのに役立った回答に感謝します)が、残りの半分は私が同期的にajaxを使用しようとしていることです。新しい投稿を作成しました
http://api.jquery.com/jQuery.ajax/ のようにcontext設定を使用する必要があります
function doop(){
var old = $(this).siblings('.old').html();
var newValue = $(this).siblings('.new').val();
$.ajax({
url: 'doop.php',
type: 'POST',
context: this,
data: 'before=' + old + '&after=' + newValue,
success: function(resp) {
if(resp == 1) {
$(this).siblings('.old').html(newValue);
}
}
});
return false;
}
「これ」は成功範囲に転送され、期待どおりに機能します。
this
は、実行関数が適用されたオブジェクトにバインドされます。これは、AJAX応答オブジェクト、グローバルオブジェクト(window
)、またはその他($.ajax
の実装に応じて)の場合があります。
$ .ajax呼び出しに入る前に、$(this)を変数にキャプチャし、それをパラメーターとして$ .ajax呼び出しに渡す必要がありますか?または、匿名の成功関数に渡す必要がありますか?それで問題が解決する場合は、どこで$ .ajaxに渡しますか?
this
関数を定義する前に、success
の値をキャプチャする方法が実際に必要です。クロージャを作成することは、これを行う方法です。別の変数を定義する必要があります(例:self
):
function doop() {
var old = $(this).siblings('.old').html();
var new = $(this).siblings('.new').val();
var self = this;
$.ajax({
url: 'doop.php',
type: 'POST',
data: 'before=' + old + '&after=' + new,
success: function(resp) {
if(resp == 1) {
$(self).siblings('.old').html(new);
}
}
});
return false;
}
success
関数は、呼び出されたときにself
の値を保持し、期待どおりに動作するはずです。