1

更新: これは 100% 機能するようになりました。

これらのコード セグメントにより、ユーザーはビューの [削除] ボタンをクリックできます。これにより、AJAX 要求がコントローラーに送信され、データベースと対話 (レコードの削除) されます。次に、コールバック関数で発生した結果をフィードバックして、レコードが削除された現在のビューを (ページの読み込みなしで) 更新し、要素を非表示にします。

意見:

<?php
// Output the records
if($result)
{
    foreach ($result as $rows => $row) 
    {
        echo "<tr id=\"row" . $row['id'] . "\">";
            echo "<td>" . $row['id'] . " - " . $row['name'] . "</td>";
            echo "<td>" . $row['logo_path'] . "</td>";
            echo "<td>" . $row['date_created'] . "</td>";
            echo "<td>" . "<a href=\"#\" id=\"" . $row['id'] . "\" class=\"delete\">Delete</a><br>" . "</td>";
        echo "</tr>";
    }

} else {
    echo "There are no platforms to show";
}
?>

<script type="text/javascript">
$("a.delete").click(function(e) 
{
    e.preventDefault();
    var platform_id = $(this).attr('data-id');
    var row = $(this).attr('id');

    $.ajax({
        type: "POST",
        url: "platform/delete",
        dataType: "json",
        data: 'platform_id='+platform_id,
        success: function(result){
            if (result.success == 1)
            {
                $("#row" + row).fadeOut();
                //document.getElementById(row).style.display = 'none'
            }
        },
        error: function(result){
            alert(result.message);
        }
    });
});
</script>

コントローラ:

function delete()
{
    $result=array(); 

    $this->load->model('platform_model');
    $platform_id = $this->input->post('platform_id');

    if($this->platform_model->delete($platform_id))
    {
        $result['success']= 1;
        $result['platform_id']= $platform_id;
        $result['message']= "Success";
    } else {
        $result['success']= 0;
        $result['message']= "Error";
    }

    die(json_encode($result));

}

モデル:

function delete($platform_id)
{
    $this->db->where('id =', $platform_id);

    if ($this->db->delete('platforms'))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }   
}
4

1 に答える 1

1

アップデート

これを機能させるためにフォーム コードは必要ありません。更新された質問では、id変数を定義する場所がありません。それがなければ、レコードを削除することはできません。

データを送信するフォームである場合、データは無視されて HTTP POST 要求によって送信されます。$this->input->post()AJAX コード データは POST データとしても送信され、AJAX モデル メソッドの配列を使用して Codeigniter によって処理されます。このプロセスをデバッグするための優れたツールは、投稿されたデータと返されたデータを確認できる Firebug です ([ネット/XHR] タブ)。

前の例では、後者は一意である必要があるため、属性のdata-id代わりに属性を使用しました。id私はその解決策を好みますがid、(属性値が繰り返される場合を除いて)任意の属性名を使用できます。

$('a.delete').click(function(e) 
{
   e.preventDefault();
   var id = $(this).attr('data-id');
   // your ajax call

HTML をアンカーとして一致させますが、ボタンまたはその他の要素である可能性があります。

<a href="#" data-id="<?php echo $row['id']; ?>" class="delete">Delete</a>

削除リンクをクリックすると AJAX コードがトリガーされるため、フォームは必要ありません。

于 2013-05-09T21:04:01.120 に答える