【问题标题】:Modify current URL without page refresh in PHP在 PHP 中修改当前 URL 而不刷新页面
【发布时间】:2017-08-30 14:01:27
【问题描述】:

谁能帮我解决我的任务。

我的网页中有两个搜索框,当用户输入一些关键字并按下提交按钮时,我想替换我的网址 www.domain.com/search 进入

www.domain.com/search/keywod1-sometext-keyword2.

【问题讨论】:

  • 抱歉,这不是 StackOverflow 的工作方式。 “我想做 X,请给我提示和/或示例代码”形式的问题被认为是题外话。请访问help center 并阅读How to Ask,尤其是阅读为什么“Can someone help me?” 不是一个实际问题?

标签: php jquery ajax curl


【解决方案1】:

建议将 pushstate 放在 try 中,以防某些网络浏览器不支持它。此外,在大多数情况下,您并没有真正需要设置历史标题,但如果您愿意:history.pushState(null, 'title', newLoc);

<script>
newLoc = "I/like/to/eat";
try {
        history.pushState(null, null, newLoc);
} catch(e) {}
location.hash = '#' + newLoc;
</script>

【讨论】:

    【解决方案2】:

    您应该在那里使用 ajax 从数据库中获取结果数据,并且在您的 ajax 成功块上,您可以使用以下代码:

    window.history.pushState("object or string", "Title", "/new-url");
    

    Manipulating the browser history on MDN:

    pushState() 采用三个参数:一个状态对象、一个标题(目前被忽略)和(可选)一个 URL。

    • 状态对象
    • 标题
    • 网址

    state 对象—— state 对象是一个 JavaScript 对象,它与 pushState() 创建的新历史条目相关联。每当用户导航到新状态时,都会触发一个 popstate 事件,并且该事件的 state 属性包含历史条目的 state 对象的副本。

    状态对象可以是任何可以序列化的对象。因为 Firefox 将状态对象保存到用户的磁盘,以便在用户重新启动浏览器后可以恢复它们,所以我们对状态对象的序列化表示施加了 640k 字符的大小限制。如果将序列化表示大于此的状态对象传递给 pushState(),则该方法将抛出异常。如果您需要更多空间,建议您使用 sessionStorage 和/或 localStorage。

    title — Firefox 当前忽略此参数,尽管它可能在未来使用它。在此处传递空字符串应该可以安全地防止将来对该方法进行更改。或者,您可以为您要迁移到的州传递一个简短的标题。

    URL — 新历史记录条目的 URL 由该参数给出。请注意,浏览器在调用 pushState() 后不会尝试加载此 URL,但它可能会在稍后尝试加载 URL,例如在用户重新启动浏览器之后。新的 URL 不需要是绝对的;如果是相对的,则相对于当前 URL 进行解析。新 URL 必须与当前 URL 同源;否则, pushState() 将抛出异常。该参数是可选的;如果未指定,则设置为文档的当前 URL。

    【讨论】:

    • 由于当前网页中的某些特定原因,我无法使用 AJAX 提交表单。所以我正在寻找其他一些方法。我已经使用普通的 PHP 表单提交完成了我的提交。
    • 你必须去 js 进行客户端修改。
    猜你喜欢
    • 2020-04-03
    • 2011-05-12
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多