首页 > 解决方案 > 使用 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) ) 

谢谢

标签: phpajaxpostfetch

解决方案


url的查询字符串在哪里...

您实际上在这里所做的是向POST带有查询字符串的 URL 发送请求。无论使用的实际 HTTP 方法如何,都会$_REQUEST解析查询字符串并将其放入。但是,只能填充带有请求正文的实际请求。$_GET $_POSTPOST

在您的fetch()通话中,指定body: formData. formData可以用这种查询字符串格式或其他方式表示。另请参阅: https ://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Body


推荐阅读