php - 使用 fetch api 时 $_REQUEST 获取参数但不获取 $_POST
问题描述
我正在使用 fetch 向后端 'ajax-admin.php' 发送 POST 请求,然后重定向到我在 functions.php 中的 php 函数。我决定用 'fetch' api 替换 xmlHttpRequests。我用 fetch 做一个 post 请求,如下所示:
fetch(url, {
method: 'POST',
credentials: "include",
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(res => res.json())
.then(data => resolve(data)) // we call resolve with the data
.catch(err => reject(err));
});
url 的查询字符串具有以下形式: action=login&tokend_id=1234
在服务器端,我使用 $_POST 来检索参数“action”和“token_id”的值。但是我看到的是 $_POST 是空的,而 $_REQUEST 确实有参数。因此,如果我执行 $_POST['token_id'] 会出现错误,因为 $_POST 为空。但是如果我这样做 $_REQUEST['token_id'] ,我会得到那个参数的值。
知道为什么会这样吗?为什么参数会在 $_REQUEST 而不是 $_POST。
我用这个语句检查了 $_POST 是否为空:
if ( isset( $_POST ) && 0 === count($_POST) )
谢谢
解决方案
url的查询字符串在哪里...
您实际上在这里所做的是向POST
带有查询字符串的 URL 发送请求。无论使用的实际 HTTP 方法如何,都会$_REQUEST
解析查询字符串并将其放入。但是,只能填充带有请求正文的实际请求。$_GET
$_POST
POST
在您的fetch()
通话中,指定body: formData
. formData
可以用这种查询字符串格式或其他方式表示。另请参阅: https ://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Body
推荐阅读
- python - 此类中的描述符发生了什么?
- java - Maven 不是从控制台生成的
- javascript - 如何使用 JavaScript 在 JSON API 中的对象内循环多个数组
- vue.js - 使用 Vue js 的错误 401(未经授权)Keycloak
- php - Php laravel 如何在一个条件之外获得唯一值
- python-requests - 我使用 Foursquare 收到错误“组”
- html - 我的 jquery 不参加这个 iframe 的课程?
- java - 如何使用杰克逊序列化 JSON 字符串中的缺失字段
- python - 将过滤后的字符串附加到列表中不起作用
- sql-server - 将数据从 Excel 文件导入 SQL Server 表时出现问题