Tetapkan pembolehubah $_POST kepada kosong semasa menggunakan php://input untuk mendapatkan semuanya betul
P粉032649413
P粉032649413 2024-03-27 19:30:45
0
1
355

Saya mencipta apl React yang daripadanya saya memanggil pelayan yang dibina pada PHP.

Begini cara saya memanggil fail 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));

Ini yang saya ada dalam fail PHP:

if (isset($_POST) && !empty($_POST)) {
  // do something
}

Bila saya print $_POST 变量时,我得到一个空数组。甚至 $_RESPONSE ia juga kosong.

Tetapi apabila saya cuba mencetak aliran input seperti ini:

print_r(file_get_contents('php://input'));

Semuanya nampak baik. Bolehkah sesiapa menjelaskan mengapa ini berlaku? Saya cuba membacanya dalam dokumentasi dan mencari beberapa forum dan blog, tetapi tidak berpuas hati dengan jawapannya.

P粉032649413
P粉032649413

membalas semua(1)
P粉718165540

Sokongan borang terbina dalam PHP hanya boleh menghuraikan application/x-www-form-urlencoded 表单和 multipart/form-data 表单。您实际发送的是一个 JSON 序列化对象,其 MIME 类型为 application/x-www-form-urlencoded.

Kepada sebenarnya hantarapplication/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));

Dalam kes ini, tidak perlu menetapkan objek Content-Type浏览器会自动执行此操作。要发送 multipart/form-data 负载(如果您想上传较大的文件,您可能需要这样做),请使用 FormData secara eksplisit.

Jika anda akhirnya mahu menghantar JSON, anda harus menghantarnya menggunakan jenis MIME yang betul dalam pengepala, application/json。在 PHP 方面,您将不得不使用 json_decode手动解析有效负载>.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan