javascript在不重定向的情况下更改get参数

javascript在不重定向的情况下更改get参数,javascript,jquery,url,redirect,Javascript,Jquery,Url,Redirect,如何在不重定向的情况下更改get参数 parent.location.search = "?after=20"; // ok that changes, but also redirect to the new page 有解决办法吗?或者答案是“否”,如果是“否”,请写大号。嗯,否-如果更改URL参数,浏览器将加载新页面。如果不从服务器重新加载页面,则无法更改查询字符串(即以“?”开头的部分)。但是,您可以使用页面锚来影响url,而无需从服务器重新加载页面。Update 由于这是公认的答案

如何在不重定向的情况下更改get参数

parent.location.search = "?after=20"; 
// ok that changes, but also redirect to the new page

有解决办法吗?或者答案是“否”,如果是“否”,请写大号。

嗯,否-如果更改URL参数,浏览器将加载新页面。

如果不从服务器重新加载页面,则无法更改查询字符串(即以“?”开头的部分)。但是,您可以使用页面锚来影响url,而无需从服务器重新加载页面。

Update 由于这是公认的答案,不再正确,请参阅以获取最新信息

原答覆如下:


不 您可以通过
位置
对象的
散列
属性访问URL的锚定部分

parent.location.hash = "whatever value you want";

如果您的目标是使用查询字符串来存储一些状态,这些状态可以在以后从书签中恢复,那么您应该改用锚定

但是,如果出于某种原因必须更改查询字符串,实际上有一种方法。然而,我并不赞同这一点。我只是为了完整起见提一下


当服务器返回
204 No Content
响应时,大多数浏览器不会执行任何操作,即甚至不会尝试转换到另一个页面,甚至不会擦除当前页面。您可以做的是,当对刚刚提供服务的同一页面发出请求时,使后端仅发出204响应,并更改查询参数。

您不能这样做,因为如果您可以。。。。如果页面可以更改URL栏中的值,那么钓鱼者放置的页面很容易将该值更改为银行网站上的页面

现在的答案是

至少在HTML5中,这意味着所有主要浏览器(IE10+)

您也可以检查我对另一个SO问题的回答:


ajax的目的是,为了让ajax正常工作,并让用户与其他人共享链接,ajax的标准范例是使用锚点而不是查询字符串。我会使用flow.ya,但这是额外的工作来检测锚点中的值并加载它,如果用户禁用了javascript,那么您还必须呈现url,并查看锚点标记中是否有任何变量,如果有,然后分配它。这样,它将可用于javascript或不使用javascript。换句话说,这需要大量额外的工作lol。如果JS被禁用,您首先要如何更改查询字符串或锚定?也许你应该解释一下你到底想达到什么目的。比如我和你分享一个链接www.domain.com/#after=20。。javascript可以呈现和显示,但我宁愿让php呈现javascript和显示的交互。所以这个方法实际上依赖于浏览器,如果浏览器重定向,那么就没有办法阻止它。。正确的?我可以设置204响应,但前提是我知道返回值。你可以安全地假设所有合理的现代浏览器的行为方式都是相同的——即,保持在同一页面上。你在最新的浏览器上进行过测试吗?我记得我让它在Firefox和ie上都能工作。你肯定应该自己测试它,以确定。但是,我再次恳求你使用锚来代替它!:)在Safari 4中尝试过这一点,它在收到204响应时清除查询字符串。不一定。。。如果服务器返回204,浏览器将保持在同一页面上。更改查询字符串和更改路径的其余部分之间有很大区别。如果您当前的主机名没有愚弄任何人,那么当您更改它时,它也不会再愚弄任何人,特别是因为您仍然可以更改它并控制输出,即使它确实转到服务器检索新的URL。正如我在下面所说的:我更喜欢@ates goral答案,但并非所有浏览器都支持它,非常遗憾。此外,这不会带来安全风险,如果有人更改查询字符串,这就不像是有人在更改完整的路径或域。即使用户可以更改路径,这也不意味着存在安全风险,因为域仍然是一样的,除非它是一个博客网站。我真的不认为应该由浏览器来决定地址栏中URL的哪些部分可以安全地更改或不更改…这是浏览器实现的一个愚蠢的小功能,我同意,但浏览器应该允许用户更改路径(而不是域),因为现在每个人都喜欢使用ajax,更改路径只是为了让用户使用与当前页面的其他用户共享链接。是的,我知道你也可以用散列来做,但是人们共享不同媒体标题的链接会让人困惑,但是他们共享的是不同的页面,因为他们是从ajax获得的。。显然还有其他一些解决办法。。但理想的做法是让域名所有者改变他们自己的路径。我更喜欢@ates goral的答案,但遗憾的是,并非所有浏览器都支持它。此外,这不会带来安全风险,如果有人更改查询字符串,这就不像是有人在更改完整的路径或域。即使用户可以更改路径,这也不意味着存在安全风险,因为域仍然是相同的,除非它是一个博客站点。我喜欢这样,但您需要知道#值永远不会发送到服务器