2010-06-17 111 views
3

为什么是它下面的脚本通过移除relievant HTML实体工程客户方:jQuery的阿贾克斯成功问题

$(".ui-delete").click(function() { 

    $.ajax({ 
     url: 'delete.aspx', 
     type: 'POST', 
     data: { strWidgetID:$(this).parents(".widget").attr("id") }, 
     error: function() { alert('Error'); }, 
     success: function() { alert('Success'); } 
    }); 


    $(this).parents(".widget:first").remove(); 
}); 

但下面的查询,这是“更合适的”,不通过移除HTML实体工作?

$(".ui-delete").click(function() { 

    $.ajax({ 
     url: 'delete.aspx', 
     type: 'POST', 
     data: { strWidgetID:$(this).parents(".widget").attr("id") }, 
     error: function() { alert('Error'); }, 
     success: function() { 
      alert('Success'); 
      $(this).parents(".widget:first").remove(); 
     } 
    }); 

}); 

第一个脚本做两个客户方和服务器端正确,第二脚本执行服务器端的正确,但在客户方,它只是显示一个警告“成功”,但不会删除HTML实体“部件”

有什么建议吗?

+0

http://stackoverflow.com/editing-help - 具有四个空格的缩进代码可以正确呈现。因为你是新来的(欢迎!)我已经为你修好了。 – 2010-06-17 08:05:22

+0

$(this)可能不是您认为的那样。在那里放一个断点并检查。 – 2010-06-17 08:05:38

回答

7

在成功处理程序中,this与您的单击处理程序(它是$ .ajax使用的XMLHttpRequest对象)不同。

捕捉到this你感兴趣的$就调用前一个参考:根据上下文

$(".ui-delete").click(function() { 
    var that = this; 

    $.ajax({ 
    // etc. 
    success: function() { 
     $(that).parents('.widget:first').remove(); 
    } 
    }); 
}; 
+0

这是完美的!谢谢。 – oshirowanen 2010-06-17 08:08:06

1

,$(这)是指不同的对象。看看这个链接What is this? 在第二个代码示例中,这指的是ajax设置对象而不是'ui-delete'元素。