【问题标题】:Duplicate Calls When Calling History.pushState调用 History.pushState 时重复调用
【发布时间】:2014-10-02 11:40:30
【问题描述】:

我们使用 Ajax 将更新发布到表单,服务器获取该 POST,将更改应用到数据库,然后将客户端浏览器重定向到下一个表单页面(想想向导)。

该页面的 302 和 GET 由 Ajax 自动处理,因此我们从服务器发回 Json 响应,其中不仅包括新页面(表单)的 HTML,还包括新页面的位置/URL。然后在 ajaxSuccess 回调中调用 history.pushState 来更新 URL 和浏览器历史记录。现在,所有这些都很好,但是有一个问题。使用 Fiddler 和 Chrome(最新)和 IE(最新)开发工具,我们可以看到,每当我们调用 history.pushState 时,实际上会导致对同一页面的另一个请求被执行。我们在 FireFox(最新)上看不到这个。

这里是代码。 that.ajaxSuccess = 函数(数据,状态,xhr){ history.pushState(null, '', data.Location.toLowerCase());

我没想到 history.pushState 会强制浏览器对服务器进行刷新/请求,所以这真的让我措手不及。

有没有人见过这个或者知道这里发生了什么。我认为我们一定是做错了什么,因为我确信这对其他人来说是一个大问题,坦率地说,我在网上没有看到任何表明这个问题很常见的东西。

我真的很感谢这里的一些帮助。出于多种原因,这显然是一笔巨大的交易......

【问题讨论】:

    标签: jquery ajax asp.net-mvc html browser-history


    【解决方案1】:

    我们在 javascript 中找到了导致请求发生的代码路径,因此它不是历史 API 本身,但是我们看到 Chrome 和 IE 上的这个历史 API 引发了一个事件,导致我们的事件处理程序调用这是我们的请求的来源。事件处理程序的目的是处理在浏览器中选择的后退/前进按钮,然后通过 ajax 执行请求。

    【讨论】:

      猜你喜欢
      • 2015-05-02
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 2016-06-09
      • 2013-06-27
      • 2013-09-01
      • 1970-01-01
      • 2014-09-14
      相关资源
      最近更新 更多