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
  1. 相対ディレクトリ (..) の前に / を付けると、それ自体を参照する絶対パスになります。それはちょっと無意味です。最初の / を削除する必要があります ('../delete_watchlist.php')。

  2. スクリプトを分割します。問題を混乱させている 1 行にあまりにも多くのものを結合しようとしています。

サーバー側のスクリプトが成功すると仮定すると、これで目的が達成されるはずです。

$(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 に答える
2

get( )よりもpost()を使用する必要があります

$.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. biz_watch12 全体ではなく 12 の ID のみが必要なので、replace を使用して ID から biz_watch を削除し、サーバーに送信できます。

$(this).closest('.biz_watch').attr('id').replace("biz_watch", "");
于 2012-05-12T12:51:30.260 に答える