0

クエリをコミットするためにページをリロードしたり、別のページにリダイレクトしたりせずに、データベースの行を更新しようとしています。私はできることは何でも試しましたが、運がありません。ギャラリーページがあります。ユーザーがアートワークを送信すると、デフォルトでは承認されず、モデレーターなどの承認されたユーザーが承認できます。モデレーターページには、未承認のアートワークが一覧表示されます。データベースには、承認済みと呼ばれる列があり、その値は0または1です。

これが私のコードです。

アップデート:

お時間を割いていただき、誠にありがとうございます。あなたが言った変更を加えましたが、まだ機能していません。確かに、私はjQuery / Ajaxがあまり得意ではないので、なぜそれが機能しなかったのかについては私の側の間違いであるに違いありません。私のコードは次のようになりました:

モデル機能:

function approve($id)
{
    $this->db->where('id', $id);
    $this->db->update('galeri', array('approved' => '1')); 
    return TRUE;
}

コントローラ

function approve($id)
{
    if ($this->galeri->approve($id)) {
        echo("VALID");
    }
}

HTML

.
.
.
<script type="text/javascript">
        $(document).ready(function() {

            var test = $("a.approval").attr("id").replace('artid-','');
            $.ajax({
                  type: 'post',
                  url: 'approve',
                  data: test,
                  beforeSend: function() {
                    parent.animate({'backgroundColor':'#fb6c6c'},300);
                  },
                  success: function(data, textStatus, jqXHR) {
                    if (data == "VALID") {
                        parent.slideUp(300,function() {
                          parent.remove();
                        });
                    };
                  }
            });
          });
        });
    </script>
.
.
.
    <?php foreach ($query->result() as $list): ?>
        <span style="display: block">
            <?php echo $list->path; ?> -- <a href="javascript:void(0)" id="artid-<?php echo $list->id; ?>'" class="approval">Approve artwork</a>
        </span>
    <?php endforeach; ?>
.
.
.
4

3 に答える 3

2

あなたは何もエコーバックしていないので、成功は何も評価していません

追加してみてください:

PHP

function approve($id) {
    $this->db->where('id', $id);
    $this->db->update('galeri', array('approved' => '1')); 
    return TRUE; // you could use several dif methods to check if updated
}

function approve($id) {
    if ($this->galeri->approve($id)) {
       echo("VALID");
    }
}

アヤックス

$.ajax({
      type: 'post',
      url: 'approve',
      data: test, // Not sure what to put here. 
      beforeSend: function() {
        parent.animate({'backgroundColor':'#fb6c6c'},300);
      },
      success: function(data, textStatus, jqXHR) {
        if (data == "VALID") {
            parent.slideUp(300,function() {
              parent.remove();
            });
        };
      }
});

また、いくつかの理由により、リンクの「e.preventDefault」を削除することをお勧めします

  • リンクにクリックコマンドを配置する必要はありません
  • その場合は、href を に設定するとjavascript:void(0)、e.preventDefault と同じように機能し、クロスブラウザー機能の読み取りの問題 (ティッシュ?) の可能性が少なくなります。
  • 前述のように、一部のブラウザーのバージョン (せき、せき) では、関数の開始時に e.preventDefault が表示されるのを好まないため、どのバージョンか覚えていませんが、一度その問題が発生し、私がしなければならなかったことを理解するのにほとんど夢中になりました。私の防止デフォルトを削除してください!(笑)
于 2012-04-20T14:37:54.530 に答える
0

お時間を割いてお答えいただきありがとうございます。問題は$.ajaxの「data」プロパティであることがわかりました。そして、これは私が思いついた解決策です(これはまさに私が望むように機能しています):

<script type="text/javascript">
        $(document).ready(function () {
            $('a.approval').click(function () {
                var test = $(this).attr('id');
                $.ajax({   
                    url: "site/approve/"+test, 
                    type: "POST", 
                    // data: test,
                    success: function(data) {

                        $('.asdf-'+test).css("background-color", "green");
                    }
                })
            });
        });
</script>

これは$.ajaxを使用する健全な方法ですか、知りたいのですが。

于 2012-04-22T16:49:16.970 に答える
0

何らかのイベントでそのjquery/ajaxリクエストを起動する必要があると思います.したがって、ユーザーが承認リンクをクリックしたときにそのajaxを実行しようとしていると考える場合は、次のようなことを試してください:

<script type="text/javascript">
        $(document).ready(function() {

       $('.approval').each(function(){
                  $(this).click(function(){
               var test = $("a.approval").attr("id").replace('artid-','');
            $.ajax({
                  type: 'post',
                  url: 'approve',
                  data: test,
                  beforeSend: function() {
                    parent.animate({'backgroundColor':'#fb6c6c'},300);
                  },
                  success: function(data, textStatus, jqXHR) {
                    if (data == "VALID") {
                        parent.slideUp(300,function() {
                          parent.remove();
                        });
                    };
                  }
            });
          });

      });
    });


        });
    </script>
.
.
.
    <?php foreach ($query->result() as $list): ?>
        <span style="display: block">
            <?php echo $list->path; ?> -- <a href="javascript:void(0)" id="artid-<?php echo $list->id; ?>'" class="approval">Approve artwork</a>
        </span>
    <?php endforeach; ?>
.
.
.

config.php ファイルの global_csrf 保護が true または false に設定されていることを確認してください。

$config['csrf_protection'] = TRUE;

true に設定されている場合は、ajax リクエストにも csrf トークンを渡す必要があります。そうしないと、codeigniter はリクエストを実行しません。

于 2012-04-21T07:47:56.150 に答える