【问题标题】:Page reload after ajax request for deleteajax请求删除后页面重新加载
【发布时间】:2015-10-11 10:17:27
【问题描述】:

我有一个网页,它显示了一个表的所有记录,前面有一个复选框。我可以选择这些框,然后发出 ajax 请求来删除它们。

删除工作正常。但即使刷新后它也会显示已删除的记录。

我用于重定向的东西

-

  • window.location.href = '/current_page';

  • location.reload(true)

我使用了他们的成功回调。如果我点击浏览器就可以了。

【问题讨论】:

  • “但即使刷新后它也会显示已删除的记录。” 听起来您的服务器端没有删除记录。 “如果我点击浏览器,它就可以工作” 不知道这是什么意思。
  • 您是否有任何数据库可以存储这些记录?或者它只是一个静态的客户端应用程序?
  • ajax 请求成功从 db 中删除记录,在成功回调中,我刷新页面以便不显示已删除的记录。但是旧记录在页面上。如果我去浏览器并单击刷新按钮。显示所有尚未正确删除的记录

标签: javascript jquery ajax


【解决方案1】:

尝试通过调用以下函数使用锚来重定向:

function redirectFunc(){
  var link = document.createElement('a');
    // set your page url 
    link.href = "url";
    document.body.appendChild(link);
    link.click();
}

【讨论】:

    【解决方案2】:

    使用 Math.random 生成哈希并将其放在页面的 href 中。这很好地在没有缓存的情况下重新加载页面。用于查询缓存中内容的缓存查找地址页面。

    看这个例子:

    function reloadWithNoCache(){
      window.location = window.location.href + '?eraseCache=' + Math.random();
    }
    <input type="button" value="Refresh With No Cache" onclick="reloadWithNoCache()"/>

    【讨论】:

    • 我尝试了这种方法,但页面上仍然存在相同的记录。只有单击浏览器进行刷新,它才能正常工作。
    • 我试过了,但没有成功,有什么方法可以重新加载完整的页面
    • 查询也使用了ajax?
    • 在重新加载页面之前尝试 window.location.hash("new-url-hash")
    【解决方案3】:

    您尝试做的方式是一种 hacky 方式。 如果您尝试刷新页面然后使用位置重新加载或任何其他方式然后没有必要进行 ajax 调用,您可以简单地进行删除调用并将页面定位到新的 url,就像初始请求一样。

    此解决方案会更大一些,但可扩展。 我希望您可能会使用一些前端模板来渲染初始表,该模板将一些数据作为模型提供给表。因此,在 ajax 请求成功而不是重新加载页面时,尝试用剩余的数据重建 DOM。

    例如:模型 = {1,2,3} 表包含 1 2 3

    删除后将模型更新为 1 3(如果您已删除 2) 并使用新模型 {1,3} 调用表的渲染方法以擦除旧表。如果你觉得数据太重(除非它太大)以至于它可能真的会用性能来唠叨用户,你可以使用这种方法。

    【讨论】:

      【解决方案4】:

      无需刷新页面。您可以在 ajax 成功回调中使用 jQuery 删除表中的行。

      【讨论】:

        最近更新 更多