【问题标题】:window.location.replace not working if the same page is reloaded如果重新加载同一页面,window.location.replace 将不起作用
【发布时间】:2015-11-23 16:06:14
【问题描述】:

我正在尝试刷新有关 Ajax 成功的页面。

var lastId = "#" + id;
window.location.replace("/myurl" + lastId);

它正在向我的浏览器写入正确的 URL,但我没有看到所做的更改。如果我刷新 (F5) 页面,我会正确看到更改,因为正确发送了 ajax。

所以我认为如果 url 相同,该页面不会强制刷新。

在这个例子中,我已经在http://mypage.com/myurl,例如,它应该将我重定向到http://mypage.com/myurl#38174,所以我的浏览器将使用id="38174"聚焦DOM元素。

正如我所说,如果我提交 ajax 请求,我的 url 将更改为 http://mypage.com/myurl#38174 并关注 id="38174" 但我没有看到我的数据库中对该元素所做的更改,如果我按 F5,它会关注相同的元素,但正确显示了更改。

为什么会这样?

我也尝试过使用window.location.hrefwindow.location,但没有成功。

如果我使用window.location.replace('http://stackoverflow.com');,它会正确地将我发送到该网站...

所以我认为问题在于用相同的 url + 一些主题标签替换时......也许?

正如我所说的,在这种情况下,特别是我们需要在 AJAX 请求成功后进行刷新,是的,这听起来很奇怪并且适得其反,但它是必要的。

【问题讨论】:

  • 更新 URL 的片段不会导致页面重新加载 - 正如您所看到的。您需要更改片段,然后手动调用window.location.reload(),但这使得发出 AJAX 请求的意义不大。一般的想法是您发出 AJAX 请求,该请求会更新您的数据存储,然后传回足够的信息以供 UI 自行更新。
  • 为什么要强制重新加载 ajax 调用?这似乎与 ajax 调用应该完成的相反
  • 用Ajax不就是不用重载吗?
  • 是的,ajax 的重点是您不需要重新加载,但在这种情况下,特别是在一切正常的情况下,我们需要重新加载,因为我们使用的是 AngularJS,而我们不需要t/can't replace HTML content with the retrieved data, because we are using static content with TWIG, long history,但在这种情况下我们需要重新加载。
  • @RoryMcCrossan 我需要找到另一种方法,因为片段总是相同的......

标签: javascript php jquery html ajax


【解决方案1】:
var lastId = "#" + id;
window.location.replace("/myurl" + lastId);
window.location.reload();

【讨论】:

  • window.location.replace 不适用于本地文件路径(例如:file:///C:/1.html)
  • 这可能是一个新问题的问题(具体问题,例如代码;起始位置和新位置是什么样的;以及来自浏览器开发工具控制台的任何错误)。
【解决方案2】:

从 URL 更新哈希不会触发新的页面加载。

您需要在 javascript 中监听 hashchange 事件来启动您的 ajax 调用,而无需刷新页面。这将为您提供更好的用户体验

如果你使用 jQuery,你可以使用类似的东西:

$(window).on('hashchange',function(){ 
    //Do ajax call here
});

【讨论】:

  • ajax 请求完成后如何帮助重新加载页面?
  • 如果他要使用这种方法,基于他所声明的意图,他不会将ajax调用放在那里,他会放window.location.reload();
猜你喜欢
  • 2018-10-09
  • 2017-11-03
  • 1970-01-01
  • 2017-11-11
  • 2013-06-21
  • 2014-10-11
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多