javascript - UrlSearchParams.get() 不适用于重写的 url
问题描述
在我的网站上,我重写了我所有的网址。但是现在我已经开始使用 AJAX 来实现投票功能(它是一个问答社区),存在一些问题:
我存储new UrlSearchParams(window.location.search)
在一个常数中。然后我为此调用.get()
方法。但是,由于 url 被重写,它无法识别查询。
const myParam = urlParams.get('id');
网址www.example.com/Questions/7
改写自www.example.com/pages/question.php?id=7
我的 .htaccess 文件如下所示:
RewriteEngine On # Turn on the rewriting engine
Options -MultiViews
RewriteRule ^$ /pages/index.php [L]
RewriteRule ^users/([0-9]+)$ pages/profile.php?id=$1 [NC] # Handle users
RewriteRule ^questions/([0-9]+)$ pages/question.php?id=$1 [NC] # Handle questions
RewriteRule ^([A-Za-z_]+)$ pages/$1.php [NC] # Handle pages
RewriteRule ^([A-Za-z_]+)$ pages/$1.html [NC] # Handle pages
当 url 被重写时,如何克服 UrlSearchParams 无法识别查询字符串数据的事实?
解决方案
您的重写规则所有内部重写,这意味着客户端代码只能看到原始 URL,即/Questions/7
.
由于您的 PHP 在服务器端运行并且可以看到重写的查询参数,因此您可以直接将它们作为 JS 变量注入,供您的客户端代码使用。
例如,把它放在你的<head>
部分......
<script>
const ID_PARAM = <?= json_encode($_GET['id'] ?? null) ?>;
</script>
推荐阅读
- vue.js - 使用 vuex-module-decorators 时组件的属性未更新
- excel - 如果基于复选框不存在,则在列表框中添加项目
- php - 如何在 PHP 中处理多个查询,包括多个 TEMPORARY 表
- linux - 在 docker 容器中创建应用程序(对任务顺序感到困惑)
- php - 如何在 PHP 中从 mongodb/driver/manager 获取集合类对象
- rabbitmq - 当响应来自使用 Spring Integration DSL 的 rabbitMQ 回复队列时,如何实现 HTTP 请求/回复?
- html - HTML不会从scss SASS中获取margin-bottom
- palantir-foundry - 如何分配热键以触发 Slate 中的事件
- sql-server - SQL Server XML 架构验证;无效内容错误;期望将次要事件设置为 0 的元素?
- c# - 无法让包装器 binance.net 正常工作