Javascript:window.location.search不更新?

时间:2018-01-13 12:01:52

标签: javascript jquery window.location

如果用户在搜索面板(页面上)中输入了参数,我需要更新URL中的搜索(查询)参数。我正在尝试这个:

$( document ).ready(function() {
    if ($('.o_website_license_search_panel').length) {
        $('.o_website_license_search_panel .o_search_submit').click(function () {
            var search = $.deparam(window.location.search.substring(1));
            console.log('before update')
            console.log(window.location.search)
            search.license_key = $(".o_website_license_search_panel input[name='license_key']").val();
            console.log('new obj ', search, $.param(search))
            window.location.search = $.param(search);
            console.log('after update')
            console.log(window.location.search)
        });
    }
});

我得到了这个输出:

before update
web.assets_frontend.js:1254 ?license_state=cancel
web.assets_frontend.js:1255 new obj  {license_state: "cancel", license_key: "test2"} license_state=cancel&license_key=test2
web.assets_frontend.js:1256 after update
web.assets_frontend.js:1257 ?license_state=cancel

正如您所看到的,window.location.search保持不变。有没有我想念的东西,或者是这样的意图?...

2 个答案:

答案 0 :(得分:3)

设置search(或location以外的hash上的任何其他属性)会导致重新加载页面。该属性将继续具有其先前的值,直到发生这种情况,这就是您在日志记录语句中看到先前值的原因。 之后记录旧值,除非页面上的代码阻止它发生,否则将使用新查询字符串重新加载页面,此时location.search将显示新字符串。

更多:window.location's properties on MDN

答案 1 :(得分:0)

您也可以使用javascript提供的历史记录api来帮助,但也让您知道它不会刷新页面但更改网址窗格中的浏览器网址,巧妙地完成您可以达到您想要的效果

访问此链接了解更多详情

https://developer.mozilla.org/en-US/docs/Web/API/History_API

注意

有时人们会将此方法用于ajax目的,从而使他们能够存储历史数据以及书签