使用jquery-json-ajax.php删除整行


deleting entire row with jquery json ajax php

我想要实现的是删除整行。首先我显示表格,然后如果您从每一行单击"删除"按钮,则会显示一个确认模式,询问您是否要删除该行。

我正在尝试使用jquery、ajax、json和PHP。当然我还在学习。

到目前为止,我所拥有的是:

Javascript文件:

function callToModal(data){
 $('#myModal3 .modal-body p').html("Desea eliminar al usuario " + '<b>' + data + '</b>' + ' ?');
 $('#myModal3').modal('show');
 $('.confirm-delete').on('click', function(e) {
 e.preventDefault();
 var id = $(this).data('id');
 $('#myModal3').data('id', id).modal('show');
});

$('#btnYes').click(function() {
// handle deletion here
var id = $('#myModal3').data('id');
alert(id);
$.ajax({
    url: "deleteFrontUser",
    type: 'POST',
    data: {
      id:id
          },
      success: function(html){
        //alert(html);
        $('[data-id='+id+']').parents('tr').remove();
        $('#myModal3').modal('hide');
      }      
    });
   return false;
});
};

在我的admin.php文件中:

public function deleteFrontUser(){
    // var_dump($_POST['id']);die();
    $rowId = $_POST['rowId'];
    $result = array();
    $front = UserDs::getInstance()->getUserById($id);
    UserDs::getInstance()->deleteItem($front);
    $result["message"] = "Usuario eliminado";
    echo json_encode($result);
}

视图(请注意,我正在使用Smarty模板引擎):

<div class="portlet-body">
        <table class="table table-striped table-hover table-users">
            <thead>
                <tr>
                    <th>Avatar</th>
                    <th class="hidden-phone">Usuario</th>
                    <th>Nombre</th>
                    <th>Apellido</th>
                    <th class="hidden-phone">Email</th>
                    <th class="hidden-phone">Provincia</th>
                    <th class="hidden-phone">Miembro desde</th>
                    <th>Estado</th>
                    <th></th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                {foreach $frontusers as $frontuser}
                <tr>
                    {if $frontuser->frontavatar_id eq null}
                    <td><img src="{site_url()}assets/img/avatar.png" alt="" /></td>
                    {else}
                    <td><img src="{site_url()}assets/img/avatar1.jpg" alt="" /></td>
                    {/if}
                    <td class="hidden-phone">{$frontuser->username}</td>
                    <td>{$frontuser->name}</td>
                    <td>{$frontuser->lastname}</td>
                    <td class="hidden-phone">{$frontuser->email}</td>
                    <td class="hidden-phone">{$frontuser->state}</td>
                    <td class="hidden-phone">{$frontuser->creation_date|date_format:"%Y/%m/%d"}</td>
                    {if $frontuser->status eq 2}
                    <td ><span class="label label-success">Activo</span></td>
                    {else}
                    <td ><span class="label label-warning">No Activo</span></td>
                    {/if}
                    <td><a class="btn mini blue-stripe" href="{site_url()}admin/editFront/{$frontuser->id}">Modificar</a></td>
                    <td><a href="#" class="btn mini red-stripe confirm-delete" role="button" onclick="callToModal('{$frontuser->username}');" data-id="{$frontuser->id}">Eliminar</a></td>
                </tr>

                <!-- modal -->
                <div id="myModal3" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel3" aria-hidden="true">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
                        <h3 id="myModalLabel3">Eliminar</h3>
                    </div>
                    <div class="modal-body">
                        <p></p>
                    </div>
                    <div class="modal-footer">
                        <button class="btn" data-dismiss="modal" aria-hidden="true">Cerrar</button>
                        <button data-dismiss="modal" class="btn red" id="btnYes">Confirmar</button>
                    </div>
                </div>
                <!-- end modal -->
                {foreachelse}
                    <tr>
                        <td colspan="2"><span class="text-error"><i class="icon-exclamation"></i> No hay Usuarios cargados.</span></td>
                    </tr>
                {/foreach}
            </tbody>
        </table>
    </div>

当您单击特定行的删除按钮时,模态会显示出来,但有趣的是:第一次按下删除时,它不会删除该行。当您按下该行或任何其他行时(在按下一次删除后),该行将被删除。所以这是一个问题,另一个问题是我无法将数据发送到我的php文件,这样我就可以将其从数据库中删除。

我该如何解决这个问题?

如果你想查看的话,我有一个定制的小提琴:代码

url必须是位于网站内的有效站点,url内不能有函数名,因为AJAX调用不知道函数位于哪个文件中。

所以你的url必须是:

url: "admin.php"

然而,您可以在AJAX调用中添加另一个参数,告诉admin.php应该执行哪个函数,类似这样的操作会起作用:

$.ajax({
    url: "admin.php",
    type: 'POST',
    data: {
        id:id,
        func:"deleteFrontUser"
    },
    success: function(html)
    {
        //alert(html);
        $('[data-id='+id+']').parents('tr').remove();
        $('#myModal3').modal('hide');
    }      
});

因此,在admin.php上,您必须在输入函数之前接收已发布的数据,并且您可以解析func变量来判断要执行哪个函数:

$rowId = $_POST['id'];
$func = $_POST['func'];
switch ($func)
{
    case 'deleteFrontUser':
        deleteFrontUser($rowId);
    break;
    default:
        // function not found.
    break;
}

deleteFrontUser看起来像这样:

public function deleteFrontUser($rowId)
{
    $result = array();
    // Rest of the code.
    echo json_encode($result);
}

也许你需要修改一下,但这应该会给你一个想法。

有关更多信息,请查看$.ajax文档。

注意:

出于最佳实践的原因,使用php的isset函数来确定数据是否实际发布。三元运算符使这变得非常简单和简短:

$emptyString = "";
$rowId = isset($_POST['id']) ? $_POST['id'] : $emptyString;
$func = isset($_POST['func']) ? $_POST['func'] : $emptyString;

我还建议使用jQuery的.on函数,并让它取参数"click",其函数将在click事件中触发。.click通常是一种糟糕的做法,因为它无法检测DOM树中的更改,所以当你用新的HTML更新它时,你就完蛋了,.on允许你向DOM树添加新元素,但仍然能够侦听与它们对应的事件。

解决方案如下:

请参阅我以前的帖子,以便获得正确的js文件并查看:post

从数据库中删除整行的Php代码为:

public function deleteFrontUser(){
    $rowId = $_POST['id'];
    $result = array();
    $front = UserDs::getInstance()->getUserById($rowId);
    UserDs::getInstance()->deleteItem($front);
    $result["message"] = "Usuario eliminado";
    echo json_encode($result);
}