Ajax jQuery的成功范围
我有这个ajax调用一个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; }
我的问题是$(this).siblings('.old').html(new);
线路没有做它应该做的事情。
谢谢..所有有用的意见/答案都被投票了。
更新:似乎一半的问题是范围(谢谢你的答案,帮助我澄清),但另一半是,我试图以同步方式使用Ajax。 我创build了一个新post
首先new
是一个保留字 。 您需要重命名该variables。
要回答你的问题,是的,你需要把它保存在成功callback之外的variables中,并在成功处理程序代码中引用它:
var that = this; $.ajax({ // ... success: function(resp) { if(resp == 1) { $(that).siblings('.old').html($new); } } })
这被称为封闭 。
您应该使用http://api.jquery.com/jQuery.ajax/中的;上下文设置
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
是绑定到执行function所应用的对象。 这可能是一些AJAX响应对象,或全局对象( window
),或其他东西(取决于$.ajax
的实现。
在进入$ .ajax调用之前,是否需要将$(this)捕获到variables中,然后将其作为parameter passing给$ .ajax调用? 还是我需要将它传递给匿名成功函数? 如果这将解决问题,我把它传递给$ .ajax?
在定义success
函数之前,确实需要一种方法来捕获这个值。 创build闭包是这样做的方法。 你需要定义一个单独的variables(例如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
的值,并且应该按照您的预期行事。