【问题标题】:CRUD methods with PHP, JS/jQuery, and a little AJAX使用 PHP、JS/jQuery 和一点 AJAX 的 CRUD 方法
【发布时间】:2011-08-04 01:32:39
【问题描述】:

我一直在开发一个系统,您可以在其中创建-读取-更新-删除到/从 SQLite 数据库中的表。到目前为止,我只编写了 create 和 view 方法(简单)。

现在,我在决定如何删除和更新项目时遇到了障碍。在视图页面,有通过php查询数据库和生成表(通过php回显成html)。每行旁边还添加了一个按钮,看起来像一个小垃圾桶,用于删除该行。

如何使用 AJAX 同时从 html 表和 sqlite 表中删除行?一个更明确的问题是,如何将每个按钮链接到每一行并在单击按钮时查询数据库?

这是生成的表格:

foreach($result as $entry){
 echo  '<tr>' . '<td>'. $entry['department']. ' ' . $entry['CRN']. '</td>' . 
    '<td>'. $entry['title'] . '</td>' . 
    '<td>'. $entry['addDate'] . '</td>'. 
    '<td><button class="fg-button fg-button-icon-left ui-state-default ui-corner-all"><span class="ui-icon ui-icon-trash"></span></button></td>'.'</tr>';
}

【问题讨论】:

    标签: php javascript jquery ajax sqlite


    【解决方案1】:
    1. 创建一个 PHP 控制器和操作。它必须将 ID 作为参数,并且应该使用该 ID 对您的数据库执行删除命令。理想情况下,它将只接受 DELETE 请求(不接受 GET 或 POST)。这并不总是可行的,因为某些浏览器不支持 DELETE HTTP 请求。
    2. 在您的前端,创建如下所示的 HTML 和 javascript:

    HTML:

    <input id="clickMe" type="button" value="Delete Button" data-rowId="12"/>
    

    Javascript:

    $(document).ready(function(){
        $('#clickMe').click(function(){
            // send the delete request
            $.ajax({
                url: '/myEntity/delete',
                data: {id: $(this).data('rowId')},
                type: 'DELETE',
                // removes the row only if the delete succeeds
                success: function(){ $(this).parents('tr').remove(); }
            });
        });
    });
    

    如果您正在使用不支持 DELETE 的浏览器,请将类型:“DELETE”更改为:“POST”。

    【讨论】:

    • 可以通过js进行删除请求吗?所以不是 .post() 而是 .delete()?
    • @TrevorMA:是的,这里可以使用 DELETE(与其他 HTTP 动词一样),但可能并非所有浏览器都支持。
    • 好吧,这不是 JS。 GET、POST 和 DELETE 是 HTTP 请求的种类。 Ajax 只是一种异步 HTTP 请求机制。上面,我使用 jQuery 来展示如何执行 DELETE。现在,在 jQuery 中,$.post 和 $.get 只是 $.ajax({ ... type: 'POST' ... }) 或 $.ajax({ ... type: 'GET' .. .})。 DELETE 没有简写,因此您必须使用我向您展示的语法。这很有用,因为 DELETE 不会被蜘蛛等意外击中。希望这会有所帮助。
    • @Demian:伙计,这个网站太残酷了!首先很难得到好的答案,人们必须以 150 wpm 的速度打字。无论如何,感谢您的 +1。
    • @Milimetric 同意,但是你会惊讶于一些缺乏想法的人会留下很多答案,以便他们首先得到答案;)
    【解决方案2】:

    您可以让 Ajax 调用返回新的值列表,然后将整个表替换为新内容。

    • 在 JS 中,使用回调进行删除调用。
    • 在回调中:

      • 清空包含 表
      • 根据 调用结果(通过调用 PHP,如果这是生成表的原因)
      • 附加该表 到div

    这是我们经常做的事情,但我们需要这样做,因为它是一个多用户系统。

    【讨论】:

    • 当您可以简单地删除行时,重新创建表似乎会产生很多不必要的开销。
    • @TrevorMA,回调是对一个函数的引用,然后您可以将其传递给其他方法,在这种情况下,传递给 ajax 调用,以便在完成时调用您的函数。跨度>
    • @Demian Brecht,这是开销,是的,但正如我在回答中所说,在多用户系统中,它将提供最准确的内容。如果结果是时间紧迫的,那么无论如何您都将定期轮询后端以获取新内容,因此已经编写了替换表的代码。我想这完全取决于要求。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多