调用History.pushState时重复调用

时间:2014-09-19 23:07:08

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

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

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

这是代码。 that.ajaxSuccess = function(data,status,xhr){   history.pushState(null,'',data.Location.toLowerCase());

<>

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

有没有人见过这个或者知道这里发生了什么。我认为我们必须在这里做错事,因为我相信这对其他人来说是个大问题。坦率地说,我没有在网上看到任何表明这个问题很普遍的事情。

我真的很感激这里的一些帮助。出于多种原因,这显然是一件大事......

1 个答案:

答案 0 :(得分:0)

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