2

我有一个列表,每个 li 都包含一个删除按钮,单击时将其删除,以及从我的数据库中选择的框数据。我创建了一个 id biz_watch'.$biz_watch_id.' 这对于每个单独的盒子都是独一无二的。使用 $.get 调用服务器端 php 脚本来删除表行。

但是脚本不起作用。如果我要取消 get 功能,我可以删除这些框,但是使用 .get 命令,就无法再删除这些框了。以下是代码

    foreach($biz_watchlist as $biz_watchlist1){
         echo '<li class="biz_watch" id="biz_watch'.$biz_watch_id.'">';
         echo '<table style="width:100%">';
         echo '<td style="width:50%">';
         echo $biz_watch_details['5'];
         echo ' | <a class="remove_watch" id="remove_watch'.$biz_watch_id.'">remove</a>';
         echo '</td>';
         echo '<td>';
         echo '<span style="float:right">'.$biz_watch_details['19'].'</span>';
         echo '</td>';
         echo '</table>';
         echo '</li>';
    }

    <script type="text/javascript">
     $(document).ready(function(){
        $('.remove_watch').click(function(){
            var li = $(this).closest('li.biz_watch');
            var action = '../delete_watchlist.php';
            var data = { id:13};
               $.post(action, data, function(){
                 li.fadeOut('slow', function() {
                     li.remove();
                 });
               });
        });
    });
    </script>

我的服务器端脚本

      <?php
        $id = $_POST["id"];

        $query = "DELETE FROM dz0yn_biz_watchlist WHERE biz_id = $id";
        $delete_watch_row = mysql_query($query);
      ?>
4

2 回答 2

2

您应该使用post()而不是get()

$.post('/.../delete_watchlist.php', {id: $(this).closest('.biz_watch').attr('id')},function(){
    $(this).closest('.biz_watch').fadeOut("slow");
});

jquery4u博客总结得很好:

如果表单的处理是幂等的(即它对世界状态没有持久的可观察影响),那么表单方法应该是 GET。许多数据库搜索没有明显的副作用,是查询表单的理想应用。

如果与处理表单相关的服务有副作用(例如,修改数据库或订阅服务),则方法应该是 POST。

编辑

您正在动态创建表,这意味着您的 .ready 在表完全创建之前被调用;因此,它很可能不会在所有行上创建点击功能。

您需要使用on()事件将事件应用于稍后可能创建的对象。

$(document).ready(function(){
    $('.remove_watch').on("click", function(){
        $.get('/.../delete_watchlist.php', {id:  $(this).closest('.biz_watch').attr('id')},function(){
            $(this).closest('.biz_watch').fadeOut("slow");
        });
    });
});

编辑

最后一次尝试:P。由于您只需要 12 的 id 而不是整个 biz_watch12,因此您可以使用 replace 从您的 id 中删除 biz_watch 以发送到服务器。

$(this).closest('.biz_watch').attr('id').replace("biz_watch", "");
于 2012-05-12T12:51:30.260 回答
2
  1. 使用 / 前缀相对目录 (..) 会将其转换为引用自身的绝对路径。这有点没有意义。第一个 / 应该被删除('../delete_watchlist.php')。

  2. 分解你的脚本。您试图将太多的东西组合在一行中,这使问题变得混乱。

假设您的服务器端脚本成功,这应该完成您所追求的。

$(document).ready(function(){
    $('.remove_watch').click(function(){
        var li = $(this).closest('li.biz_watch');
        var action = '../delete_watchlist.php';
        var data = { id: li.attr('id').substr(9) };
        $.post(action, data, function(){
            li.fadeOut('slow', function() {
                li.remove();
            });
        });
    });
});
于 2012-05-12T16:08:50.273 回答