猿问

您如何将 XMLHttpRequest 与 POST 方法一起使用?

我有一个中央 PHP 脚本,用于处理来自我的页面的许多请求,使用来自 JavaScript 的 XMLHttpRequest() 调用,使用 GET 方法。我的服务器 PHP 目前是 5.6,是的,我正在避免同步调用。


一切都很好,但是在某些情况下,我不希望请求保留在浏览器历史记录中,甚至不显示在 URL 中。所以基于这个调用的MDN 参考,我想我可以简单地切换到 POST 方法,保留我现有的请求(例如“ http://myscript.php?cmd=dothis&data=somedata ”)。那么我所要做的就是在我的 PHP 脚本中添加一些代码,这样我就可以以任何一种方式收集传递的数据......


if  ($_SERVER['REQUEST_METHOD'] === 'GET') {

    if(isset($_GET['cmd'])) $cmd = $_GET['cmd'];

    if(isset($_GET['data'])) $data =  $_GET['data'];  

    }


if  ($_SERVER['REQUEST_METHOD'] === 'POST') {

    if(isset($_POST['cmd'])) $cmd = $_POST['cmd'];

    if(isset($_POST['data'])) $data =  $_POST['data'];  

    }

嗯,显然我错了。我发现的是...

  1. 当我切换到 POST 方法时,$_POST 数组中的脚本看不到此示例中显示的任何变量。

  2. 从 $_POST 数组切换到 $_REQUEST 数组工作正常(例如:“if(isset($_REQUEST['cmd'])) $cmd = $_REQUEST['cmd']);” ), 但....

  3. 只是使用 POST 方法发出我的 XMLHttpRequest() 调用的行为会导致我的日志中出现这样的错误:

PHP 弃用:自动填充 $HTTP_RAW_POST_DATA 已弃用,将在未来版本中删除。为避免此警告,请在 php.ini 中将 'always_populate_raw_post_data' 设置为 '-1' 并改用 php://input 流。在未知的第 0 行

所以显然这是一个死胡同。尽我最大的努力研究这里发生的事情,在PHP 手册中对 POST 的参考中,我在上面读到了这个……

$_POST $HTTP_POST_VARS [已弃用]

因此,如果我正确理解这一点,我只能使用 $_REQUEST 数组获取 POST 变量的原因是因为我的请求仍然被格式化,就好像我仍在使用 GET 一样,这(显然?)是一种不推荐使用的方法。因此,“哄”它工作只是将问题移到未来。

顺便说一句,我可以通过调用服务器上的 phpinfo.php 看到,尽管我在日志中看到了错误,但“always_populate_raw_post_data”确实已经设置为“-1”。因此,我发现的所有“解决方案”都建议我“只是”在我的 PHP.INI 文件中进行此设置,但都无济于事。

即使它确实“隐藏”了错误,这样做似乎与我无关。我说即使我在使用 POST 方法时简单地从 $_REQUEST 数组中收集我传递的 PHP 变量,并找出一种方法来抑制我的日志中的“已弃用”警告,整个方案仍然会崩溃(并让我的 POST 请求失败),我最终迁移到 PHP 7.x 的那一天?

我很抱歉在这里提问,但我真的尝试搜索我能找到的所有参考资料,以使用 POST 方法执行 XMLHttpRequests,以及我在日志中收到的已弃用的错误消息。那里有太多过时的信息,我找不到关于如何正确更改或重新格式化我的 XMLHttpRequests 以便我可以使用 POST 方法的任何明确讨论。事实上,我什至不能肯定地确定在 PHP.5.6 之后是否可以这样做。任何帮助将不胜感激。


慕田峪4524236
浏览 241回答 1
1回答
随时随地看视频慕课网APP
我要回答