Maison > Questions et réponses > le corps du texte
J'ai créé une application React à partir de laquelle j'appelle un serveur construit sur PHP.
Voici comment j'appelle le fichier PHP :
const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: JSON.stringify({ name, username, password }), }; console.log(requestOptions); fetch('http://localhost/crud/requests/signup.php', requestOptions) .then(res => res.json()) .then(data => console.log(data));
Voici ce que j'ai dans le fichier PHP :
if (isset($_POST) && !empty($_POST)) { // do something }
Quand j'imprime $_POST
变量时,我得到一个空数组。甚至 $_RESPONSE
, il est également vide.
Mais quand j'essaie d'imprimer le flux d'entrée comme ceci :
print_r(file_get_contents('php://input'));
Tout semble bien. Quelqu'un peut-il expliquer pourquoi cela se produit ? J'ai essayé de le lire dans la documentation et de rechercher des forums et des blogs, mais je n'ai pas été satisfait des réponses.
P粉7181655402024-03-28 13:41:16
La prise en charge des formulaires intégrée de PHP ne peut analyser que application/x-www-form-urlencoded
表单和 multipart/form-data
表单。您实际发送的是一个 JSON 序列化对象,其 MIME 类型为 application/x-www-form-urlencoded
.
Pour en fait envoyerapplication/x-www-form-urlencoded
表单,请使用URLSearchParams
而不是 JSON.stringify
:
fetch('http://localhost/crud/requests/signup.php', { method: 'POST', body: new URLSearchParams({ name, username, password }), }) .then(res => res.json()) .then(data => console.log(data));
Dans ce cas, il n'est pas nécessaire de définir explicitement l'objet Content-Type
:浏览器会自动执行此操作。要发送 multipart/form-data
负载(如果您想上传较大的文件,您可能需要这样做),请使用 FormData
.
Si vous souhaitez finalement envoyer du JSON, vous devez l'envoyer en utilisant le type MIME correct dans l'en-tête, application/json
。在 PHP 方面,您将不得不使用 json_decode
.