代码之家  ›  专栏  ›  技术社区  ›  Noufal Ibrahim

HTTP POST和优雅降级

  •  3
  • Noufal Ibrahim  · 技术社区  · 14 年前

    我有一个Web应用程序,其中包含一个使用Ajax回调创建的项目表。表顶部的一组表单字段允许我根据各种条件筛选将在表中显示的项目并显示出来。

    表中的某些部分的项目列表旁边有一个[X]标记,我可以通过单击这些项目来删除。

    现在,如果我以非Ajax/javascript的方式进行此操作,页面将收到一堆已发布的数据字段,然后相应地呈现表。我可以这样做,但我也希望整个设置微开。我的问题是关于这个。

    1. 如何创建[X]按钮。简单的 <a> 会“工作”,但它是一个GET修改状态,所以我不想这样做。我现在做的方式是一个带有隐藏参数的小表单,而不是保存要删除的项目,以及一个样式化的提交按钮,即[X]。如果我不加掩饰,我就能得到回应,做必要的事。

    2. 如何保持后端干燥?我不想有两个完全不同的代码位用于未加修饰版本和常规版本。我现在要做的是让非Ajax版本提交到一个URL,该URL更改状态,然后再次重定向到主页(类似于PRG类型的系统)。启用了Ajax后,我只需调用URL并忽略重定向,但使用返回的数据来调整表。这是“正确的方法”吗?

    3. 关于如何保持后端干燥的优雅降级还有其他建议吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   andrewmu    14 年前

    我会把每一行放进它自己的形式 method='POST' ,并包含一个隐藏字段,说明要删除的项。[X]将提交表单,并且在表单的提交事件中,如果不存在xmlhttpRequest,只需将表单提交到服务器,服务器将删除该项并再次重定向到同一页(这是避免重新加载而重新提交删除日志的好做法)。
    如果存在xmlhttpRequest,请将其设置为使用要删除的对象的ID进行发布,然后在请求成功时删除该行。您可以在Ajax请求中设置一个标志,这样重定向就不会发生,只会成功(200可以)。