如何使用带有 POST 方法的 XMLHttpRequest?
How do you use XMLHttpRequest with POST method?
我有一个中央 PHP 脚本,用于处理来自我页面的许多请求,使用来自 JavaScript 的 XMLHttpRequest() 调用,使用 GET 方法。我的服务器 PHP 目前是 5.6,是的,我正在避免同步调用。
一切正常,但在某些情况下,我不希望请求保留在浏览器历史记录中,甚至不希望显示在 URL 中。所以基于 MDN reference on this call, I thought I could simply switch to the POST method, keeping my existing requests (such as "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'];
}
很明显我错了。我发现的是...
- 当我切换到 POST 方法时,$_POST 数组中的脚本无法看到此示例中显示的任何变量。
- 从 $_POST 数组切换到 $_REQUEST 数组工作正常(例如:"if(isset($_REQUEST['cmd'])) $cmd = $_REQUEST['cmd']);"),但是....
- 只是使用 POST 方法发出我的 XMLHttpRequest() 调用的行为,导致我的日志中出现如下错误:
PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is
deprecated and will be removed in a future version. To avoid this
warning set 'always_populate_raw_post_data' to '-1' in php.ini and use
the php://input stream instead. in Unknown on line 0
很明显,这是一条死胡同。尽我最大的努力研究这里发生的事情,在 PHP manual reference to POST 我在最上面读到这个...
$_POST $HTTP_POST_VARS [deprecated]
所以如果我理解正确的话,我只能使用 $_REQUEST 数组获取 POST 变量的原因是因为我的请求仍然被格式化,就好像我仍在使用 GET,这(显然?) 是一种已弃用的方法。因此,"coaxing" 它的工作只是将问题转移到未来。
顺便说一句,通过在我的服务器上调用 phpinfo.php,我可以看到尽管我在日志中看到错误,但 "always_populate_raw_post_data" 确实已经设置为“-1”。因此,我发现所有 "solutions" 建议我 "JUST" 在我的 PHP.INI 文件中进行此设置都无济于事。
即使它确实 "hide" 错误,这样做对我来说似乎无关紧要。我是不是说错了,即使我只是在使用 POST 方法时从 $_REQUEST 数组中收集我传递的 PHP 变量,并想出一种方法来抑制我的 "deprecated" 警告日志,整个方案仍然会崩溃(并使我的 POST 请求失败),在我最终迁移到 PHP 7.x.?
的那一天
我很抱歉在这里提问,但我确实已经尝试搜索我能找到的所有参考资料,以了解使用 POST 方法执行 XMLHttpRequests 以及我在日志中收到的已弃用的错误消息。那里有太多过时的信息,我找不到任何关于如何正确更改或重新格式化我的 XMLHttpRequests 以便我可以使用 POST 方法的明确讨论。事实上,我什至无法肯定地确定是否可以在 PHP.5.6 之后这样做。非常感谢任何帮助。
PHP 错误地将 $_GET
和 $_POST
命名为 Web 浏览器将数据置于 HTML 形式的默认位置,其中 method
属性设置为 GET 或 POST。
$_GET
从查询字符串中获取数据,即使请求方法是 POST.
请求正文由您传递给 send
的参数决定。您放入查询字符串中的数据保留在查询字符串中。
const url = 'http://myscript.php'
const form_data = new FormData();
form_data.append("cmd", "dothis");
form_data.append("data", "somedata");
cost xhr = new XMLHttpRequest;
xhr.open("POST", url);
xhr.addEventListener('load', function () { console.log(this.response); });
xhr.send(form_data);
我有一个中央 PHP 脚本,用于处理来自我页面的许多请求,使用来自 JavaScript 的 XMLHttpRequest() 调用,使用 GET 方法。我的服务器 PHP 目前是 5.6,是的,我正在避免同步调用。
一切正常,但在某些情况下,我不希望请求保留在浏览器历史记录中,甚至不希望显示在 URL 中。所以基于 MDN reference on this call, I thought I could simply switch to the POST method, keeping my existing requests (such as "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'];
}
很明显我错了。我发现的是...
- 当我切换到 POST 方法时,$_POST 数组中的脚本无法看到此示例中显示的任何变量。
- 从 $_POST 数组切换到 $_REQUEST 数组工作正常(例如:"if(isset($_REQUEST['cmd'])) $cmd = $_REQUEST['cmd']);"),但是....
- 只是使用 POST 方法发出我的 XMLHttpRequest() 调用的行为,导致我的日志中出现如下错误:
PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
很明显,这是一条死胡同。尽我最大的努力研究这里发生的事情,在 PHP manual reference to POST 我在最上面读到这个...
$_POST $HTTP_POST_VARS [deprecated]
所以如果我理解正确的话,我只能使用 $_REQUEST 数组获取 POST 变量的原因是因为我的请求仍然被格式化,就好像我仍在使用 GET,这(显然?) 是一种已弃用的方法。因此,"coaxing" 它的工作只是将问题转移到未来。
顺便说一句,通过在我的服务器上调用 phpinfo.php,我可以看到尽管我在日志中看到错误,但 "always_populate_raw_post_data" 确实已经设置为“-1”。因此,我发现所有 "solutions" 建议我 "JUST" 在我的 PHP.INI 文件中进行此设置都无济于事。
即使它确实 "hide" 错误,这样做对我来说似乎无关紧要。我是不是说错了,即使我只是在使用 POST 方法时从 $_REQUEST 数组中收集我传递的 PHP 变量,并想出一种方法来抑制我的 "deprecated" 警告日志,整个方案仍然会崩溃(并使我的 POST 请求失败),在我最终迁移到 PHP 7.x.?
的那一天我很抱歉在这里提问,但我确实已经尝试搜索我能找到的所有参考资料,以了解使用 POST 方法执行 XMLHttpRequests 以及我在日志中收到的已弃用的错误消息。那里有太多过时的信息,我找不到任何关于如何正确更改或重新格式化我的 XMLHttpRequests 以便我可以使用 POST 方法的明确讨论。事实上,我什至无法肯定地确定是否可以在 PHP.5.6 之后这样做。非常感谢任何帮助。
PHP 错误地将 $_GET
和 $_POST
命名为 Web 浏览器将数据置于 HTML 形式的默认位置,其中 method
属性设置为 GET 或 POST。
$_GET
从查询字符串中获取数据,即使请求方法是 POST.
请求正文由您传递给 send
的参数决定。您放入查询字符串中的数据保留在查询字符串中。
const url = 'http://myscript.php'
const form_data = new FormData();
form_data.append("cmd", "dothis");
form_data.append("data", "somedata");
cost xhr = new XMLHttpRequest;
xhr.open("POST", url);
xhr.addEventListener('load', function () { console.log(this.response); });
xhr.send(form_data);