【问题标题】:Using AJAX or jQuery to update an HTML table使用 AJAX 或 jQuery 更新 HTML 表格
【发布时间】:2015-01-21 02:48:06
【问题描述】:

根据我在 AJAX 上阅读的 here,它用于更新页面而无需刷新它。我已阅读further,并注意到(至少)其中的 JavaScript 部分让您将数据发送到另一个页面。

根据我对 jQuery 的了解和经验,它基本上是一个强大的 JavaScript 库。

我要做什么

我正在尝试使用允许用户在表格中添加和删除的按钮。我已经知道我很可能会使用 AJAX 来加载表格内容(因为这不仅仅是我试图加载的内容,而且下拉菜单将确定要显示的表格)。我的问题是,当用户单击按钮自己插入/删除表行时,我应该让 jQuery 就地处理,还是应该通过 AJAX 将表发送到文档以进行操作并发回? (我正在尝试在我的页面上获得那个不错的不重新加载功能。)

【问题讨论】:

  • 删除相当简单。一旦在服务器上确认,您只需从页面中删除一行。通常插入一行并不困难,并且无需替换整个表格即可保持页面/元素定位。大多数表格插件还具有传递新行数据以为您创建和插入 html 的方法
  • 这可以通过 AJAX 还是 jQuery 完成,我是否必须发送整个 HTML 对象?
  • 我必须把东西寄过来吗?

标签: javascript jquery html ajax


【解决方案1】:

如果你只有一个简单的按钮,它会从表格中删除一行,例如:

<tr id="table_row_id">
  <td>some info</td>
  <td><button class="remove-row">Remove</button></td>
</tr>

是的,您需要 jQuery 侦听器来处理该按钮上的单击事件。例如:

// This could easily be a call to .click()
$('.remove-row').on('click', function() {
  var idToRemove = $(this).parent().attr('id');
  $.ajax({
    method: "POST",
    data: {
      'action': 'remove',
      'id': idToRemove
    },
    success: function(response) {
      // here you can check if the element is removed from the server
      // based on the response that the server returns.
      // And if it is, you can remove it from the dom.
      $('#' + idToRemove).remove();
    },
    error: function(error) {
      // Here you can show an user message, "Sorry cannot remove element."
    } //...
  });
});

您需要意识到的是,这是异步编程,您只需定义回调。当服务器完成工作并收到响应后,就会调用回调。

因此您可以根据用户交互或时间间隔重新加载表格。

我推荐:

  • 不发送 HTML 到服务器,只发送一些 json 数据,服务器也一样 - 不响应 HTML 或几乎不转义符号,只响应字符串 'done' 或 json {"removed": "someID “}。不同语言的 HTML 解析器是不同的,你需要对 HTML 进行转义,如果你发送带有 HTML 的 json 数据,你会遇到 JSON 解析器的问题。因此,只需发送带有您请求的确切信息的 JSON 就可以了?您尝试读取/创建/更新/删除哪个元素?
  • 如果您从数据库/服务器中创建/更新/删除某些具有 ID 的项目,则每次将 ID 从服务器返回给客户端。大多数情况下,最好准确处理要删除的项目。
  • 了解CRUD 操作。

【讨论】:

  • "配置服务器只返回数据,而不是 HTML。"是通过上面的代码完成的吗?
  • 不,只是在向客户端发送响应时,不要发送包含这些符号 >、
  • It's hard to escape. .. 没有意义。如果作为 html 发送,则不需要转义。如果发送包含在 JSON 中的 html,json 编码器将很好地进行转义,并且在客户端中没有任何事情可以取消转义
  • 对不起,我的英语令人困惑,我的意思是,有时您可能在 JSON 或任何其他解析器中遇到 HTML 问题,因为 HTML 使用 ' 和 @987654327 @ 用于属性:class="foo"。如果您想在其他地方解码数据之前修改数据,这可能会产生冲突。例如:stackoverflow.com/questions/16653786/… -- 最好只发送数据,而不是 HTML。它既简单又小。
  • 由于某种原因,当我尝试使用它向页面发送数据时(通过将 .ajax() 的 url 设置为页面的路径名),页面不接收数据。
猜你喜欢
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2020-04-26
  • 2014-11-25
相关资源
最近更新 更多