Jquery:ajax成功后删除DOM元素

Posted

技术标签:

【中文标题】Jquery:ajax成功后删除DOM元素【英文标题】:Jquery:Remove DOM element after ajax success 【发布时间】:2014-03-21 14:39:48 【问题描述】:

在 ajax 成功后尝试删除元素时遇到问题..

这是我的 ajax 代码:

verifyRequest.denyUser = function(requestId,element)
    $.ajax(
        url: loaderURL+'idverified/denyRequest',
        dataType:"json",
        type:"post",
        data:
            id:requestId,   
        ,
        success: function(data)
            element.remove();
           
    ); 

并收听此事件:

$("#requestUsers ul li .remove").click(function()
    var id = $(this).attr("data-value"),
        element = $(this).parent('li');

        verifyRequest.denyUser(id,element);     
);

问题是这样的 - ajax 工作正常但是当涉及到“成功:”部分时 它不会删除元素。

我尝试了这段代码,它可以工作,但这不符合我的需要:

$("#requestUsers ul li .remove").click(function()
    var id = $(this).attr("data-value"),
        element = $(this).parent('li');

        verifyRequest.denyUser(id,element);
            element.remove();//and it did worked
);

有人能解释一下为什么会这样吗?谢谢

【问题讨论】:

你确定成功回调被触发了吗? 是的,很确定.. 在控制台上返回 200OK 你确定你的“成功”处理程序真的被调用了吗?可以在里面添加console.log或者断点来验证吗? 你确定那个元素是一个 jQuery 对象吗?如果不是,你应该这样做$(element).remove(); @NEWBIE 原因很多,也许你应该看看你的服务器脚本... 【参考方案1】:

存储引用,然后将其删除。这样:

verifyRequest.denyUser = function(requestId,element)
var t = $(element);
$.ajax(
    url: loaderURL+'idverified/denyRequest',
    dataType:"json",
    type:"post",
    data:
        id:requestId,   
    ,
    success: function(data)
        $(t).remove();
       
); 

【讨论】:

我认为在你的成功函数上你应该做t.remove();而不是$(t).remove();,因为你定义了t=$(element),所以它已经是一个jQuery对象了。 控制台中的任何错误。尝试在成功功能上发出警报。 @vekah: $(element) 将返回 jquery 对象。是的,你需要 $(t) 才能访问它。 @MilindAnantwar 不,vekah 是正确的,不需要包裹两次【参考方案2】:

解决方案: 问题实际上出在服务器端..如果您依赖成功事件,您的服务器端必须始终返回一个 json ..即使它为空或您喜欢什么。因为只有在

的情况下才会触发成功
<?php  
 if(isset($_POST['yourData']) && !empty($_POST['yourData']))
   if(//evaluate further)
     // This will trigger success
     echo json_encode(array());
   else
     throw new HttpException(403,'Unauthorized request');
   
 else
  throw new HttpException(404,'Not Found')
 
?>

如果您的评估返回true,则此方式将触发成功..

【讨论】:

以上是关于Jquery:ajax成功后删除DOM元素的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中,Ajax发送后刷新局部页面的方法

删除 DOM 元素后我应该调用 jQuery.off 吗?

AngularJS再次加载初始内容后无法在DOM上使用JQuery

如何在 ajax 调用成功中访问 jquery 对象 - 未捕获的错误:SYNTAX_ERR:DOM Exception 12

如何删除 Vue.js 中的元素?

Jquery .ajax():唯一的 AJAX 查询标识符?