我正在尝试创建一个小型 Web 应用程序,在其中通过 Javascript 更新 URL 中的 2 个参数。
当我尝试"window.location.search = 'scene.html?name=' + person + '&scene=' + readCookie("scene");"
页面不断重新加载。每次“加载”页面时,我都试图将当前的“场景”参数分配给一个递增的值。
为什么我的页面总是用空值和未定义值重新加载?
我正在尝试创建一个小型 Web 应用程序,在其中通过 Javascript 更新 URL 中的 2 个参数。
当我尝试"window.location.search = 'scene.html?name=' + person + '&scene=' + readCookie("scene");"
页面不断重新加载。每次“加载”页面时,我都试图将当前的“场景”参数分配给一个递增的值。
为什么我的页面总是用空值和未定义值重新加载?
当您更新window.location
浏览器时,浏览器将尝试请求您现在设置的新 URL。
如果你想在不重新加载页面的情况下更新 URL,你有两个选择,要么只是更新hash
(可以添加到 URL 末尾的部分,前面有一个#
字符),而不是导致页面加载并且不会发送到服务器。或者您可以考虑使用HTML5 pushState API,该 API 仅受较新的浏览器支持,但提供了更大的灵活性。
如果你想更新两个参数,那么这就足够了:
window.location.search = '?name=' + person + '&scene=' + readCookie("scene");
也就是说,您不需要添加scene.html
"window.location.search" is the content of the current url after '?'.
因此,当您为其分配另一个值时,浏览器将对其进行更新并向服务器发送请求。
首先,我不是在追随你为什么想做这样的事情。
每当您更改 window.location 时,浏览器都应该去那里。这就是您获得重新加载效果的原因。您可以在不重新加载的情况下从该位置更改的唯一内容是哈希 (#) 部分。
您可以做的另一件事是使用 pushState操作浏览器的历史记录(只有最新版本支持)并在不重新加载的情况下更改 url(而且服务器也不会知道更改),例如:window.history.pushState({},"","scene.html?name=123");
另请注意,由于您更改了位置的搜索属性,因此不应包含路径名 (scene.html)。所以正确的方法是:window.location.search = '?name=' + person + '&scene=' + readCookie("scene");