如何使用 JavaScript 读取 post 请求参数

IT技术 javascript html
2021-01-22 13:36:03

我正在尝试从我的 HTML 中读取 post 请求参数。我可以在 JavaScript 中使用以下代码读取获取请求参数。

$wnd.location.search

但它不适用于发布请求。谁能告诉我如何使用 JavaScript 读取 HTML 中的 post 请求参数值?

6个回答

POST 数据是服务器端处理的数据Javascript 在客户端。因此,您无法使用 JavaScript 读取帖子数据。

由于浏览器正在获取诸如 Web 应用程序之类的东西,应用程序(通常)100% 在浏览器中运行(没有服务器,除了托管文件),自然需要能够接收更大的数据块。查询字符串(GET 方法)的大小有限制(想想 4K),所以从 javascript 读取更大块的 POSTED 数据的能力将是一个好主意恕我直言。
2021-03-17 13:36:03
@GetFree:这种所谓的 POST 变量知识对 Web 开发人员有什么好处?没有 Web 开发人员会编写基于浏览器的客户端脚本,这可能会使发布数据可供 JavaScript 使用,因为正如您所指出的,这在实践中从未发生过因此,在现实世界中,这里给出的答案是正确的,也是我自己的。
2021-03-23 13:36:03
@PlatinumAzure,我不确定您是否理解这一点。您说 POST 数据存在于服务器中,并且由于 javascript 在客户端中运行,因此 JS 无法访问该数据。这是错误的,POST 数据同时存在于客户端和服务器中,JS 无法访问该数据的原因仅仅是因为客户端(浏览器)没有将其提供给 JS。就如此容易。
2021-03-30 13:36:03
@PlatinumAzure,是的,无论出于何种原因都无法完成。但是,如果您要解释该原因是什么,请确保这是正确的原因。你对为什么不可能的解释是错误的,这就是重点。
2021-04-04 13:36:03
尽管结论是正确的(您无法从 javascript 获取该数据),但推理是错误的。客户端(浏览器)首先将 POST 数据发送到服务器。所以客户很清楚这些数据是什么。实际原因很简单,浏览器没有让 javascript 可以使用这些数据(但它完全可以)。
2021-04-05 13:36:03

让服务器填充 JavaScript 变量的一小段 PHP 快速而简单:

var my_javascript_variable = <?php echo json_encode($_POST['my_post'] ?? null) ?>;

然后只需以正常方式访问 JavaScript 变量即可。

请注意,除非您检查,否则不能保证任何给定的数据或类型的数据都会被发布 - 所有输入字段都是建议,而不是保证。

被黑了,肯定的。不逃避就不要用上面的方法。
2021-03-15 13:36:03
现在这就是我所说的开箱即用的思考。
2021-03-18 13:36:03
小心转义/添加引号/等。如果你走这条路,你的 POST 数据。另一种方法是使用 json_encode(),它几乎适用于任何数据类型。示例:abeautifulsite.net/passing-data-from-php-to-javascript
2021-03-24 13:36:03
这是不可行的,可能存在字符转义问题。
2021-04-06 13:36:03
这肯定是最简单的方法。通过创建一个新的主题页面并简单地在窗口级别公开帖子数据,例如 window.my_prefix_post_data = <?php echo $_POST['my_post'] ?>; 然后以这种方式轻松访问来自任何范围的发布数据。对于始终通过大量敏感帖子数据的站点,不建议这样做,但对于我们的页面/站点的范围,它效果很好。
2021-04-07 13:36:03

JavaScript 是一种客户端脚本语言,这意味着所有代码都在网络用户的机器上执行。另一方面,POST 变量转到服务器并驻留在那里。浏览器不会向 JavaScript 环境提供这些变量,任何开发人员也不应该期望它们神奇地存在。

由于浏览器不允许 JavaScript 访问 POST 数据,如果没有像 PHP 这样的外部参与者将 POST 值回显到脚本变量或在传输中捕获 POST 值的扩展/插件,则几乎不可能读取 POST 变量。GET 变量可通过变通方法获得,因为它们位于可由客户端计算机解析的 URL 中。

你没有明白我的意思。除非服务器明确提供它们,否则没有人会编写期望 POST 变量可用的 JavaScript。如果服务器不提供它们,那么对于编写 JavaScript 代码的 Web 开发人员而言,它们可能根本不在客户端。
2021-03-24 13:36:03
我坚决不同意你的 -1。该问题在 OP 中没有任何地方指定 AJAX,因此存在链接点击和表单提交不是由 JavaScript 执行的可能性。后者尤其是 POST 变量存在但在客户端不可用的示例,除非服务器响应由脚本生成并且脚本选择将 POST 变量的值回显到 JS 代码中。如果我可以 -1 你的评论,我会的。
2021-03-28 13:36:03
我不是在谈论 AJAX。我的论点是指任何形式的 POST 请求。浏览器知道作为 HTTP 请求的一部分发送的每个参数,其中包括 URL 和 POST 参数。其中一些参数可供 javascript 使用,而另一些则不可用。这只是浏览器强加的限制,它很可能允许从 JS 访问 POST 参数,但事实并非如此,这是一个简单的事实。
2021-04-02 13:36:03
我的解释不完整,没有错。我已经编辑了我的答案,以便您也应该感到高兴。如果你不是,那么不要给我 -1 和讽刺的评论,自己编辑它。
2021-04-03 13:36:03
我的意思是,服务器不会将它们作为 GET 数据公开给客户端,而是客户端能够为它们重新解析 URL。另一方面,POST 数据不会在 URL 中。如果您愿意,很乐意更改语言,但索赔没有争议。
2021-04-06 13:36:03

使用 sessionStorage!

$(function(){
    $('form').submit{
       document.sessionStorage["form-data"] =  $('this').serialize();
       document.location.href = 'another-page.html';
    }
});

在另一个-page.html:

var formData = document.sessionStorage["form-data"];

参考链接 - https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

它应该是 form.on('submit',function(){document.sessionStorage["form-data"] = $('this').serialize();window.location.href = 'another-page.html';})
2021-03-12 13:36:03
如果发布请求来自子域或其他域怎么办?构想破灭。
2021-04-05 13:36:03
@ZefirZdravkov您可以设置一个cookie与samesite = NoneSecure因此Chrome允许它的使用。
2021-04-08 13:36:03

为什么不使用 localStorage 或任何其他方式来设置您想要传递的值?

这样你就可以从任何地方访问它!

通过任何地方我的意思是定域/范围内

@ZefirZdravkov,虽然我同意你关于给定限制的存在,但它的存在是由于基于浏览器的安全实现。我只能想象如果这是“任何网站都可以阅读任何其他内容”的场景,那将是无限的恐怖。
2021-03-17 13:36:03
如果发布请求来自子域或其他域怎么办?构想破灭。
2021-03-19 13:36:03
为什么不只是一个简单的饼干?
2021-03-31 13:36:03
@Ian 任何站点实际上都可以通过 CURL 或 Ajax 读取任何其他站点的内容。如果指的是“任何其他站点的本地存储”,那么,是的,那将是可恶的。我要说的是,仅当您仅向该域接收/发送 POST 请求时,此答案才有效。例如,来自 的 POST 请求cloudianos.com不会到达api.cloudianos.com的 JavaScript,因为它们不共享相同的localStorage.
2021-04-06 13:36:03