Sayangnya, jawaban @EatOng ini salah . Setelah membaca jawabannya, saya menambahkan variabel dummy ke setiap permintaan AJAX yang saya aktifkan (bahkan jika beberapa di antaranya sudah memiliki beberapa bidang) hanya untuk memastikan kesalahan tidak pernah muncul.
Tapi sekarang saya menemukan kesalahan yang sama dari PHP. Saya mengkonfirmasi dua kali bahwa saya telah mengirim beberapa data POST (beberapa bidang lain juga bersama dengan variabel dummy). Versi PHP 5.6.25, always_populate_raw_post_datanilai ditetapkan ke 0.
Juga, saat saya mengirim application/jsonpermintaan, PHP tidak mengisinya $_POST, melainkan saya harus ke json_decode()badan permintaan POST mentah, dapat diakses oleh php://input.
Sebagai jawaban dari @ rr- cites,
0 / off / apa saja: perilaku BC (terisi jika tipe konten tidak terdaftar atau metode permintaan selain POST ).
Karena metode permintaan pasti POST, saya kira PHP tidak mengenali / menyukai Content-Type: application/jsonpermintaan saya (sekali lagi, mengapa ??).
PILIHAN 1:
Edit php.inifile secara manual dan setel variabel pelakunya ke -1, seperti yang disarankan oleh banyak jawaban di sini.
PILIHAN 2:
Ini adalah bug PHP 5.6. Tingkatkan PHP.
OPSI 3:
Seperti yang dijawab oleh @ user9541305 di sini, mengubah Content-Typepermintaan AJAX menjadi application/x-www-form-urlencodedatau multipart/form-dataakan membuat PHP mengisi $_POSTdari badan POSTed (karena PHP menyukai / mengenali content-typeheader tersebut !?).
OPSI 4: RESOR TERAKHIR
Yah, saya tidak ingin mengubah Content-TypeAJAX, itu akan menyebabkan banyak masalah untuk debugging. (Chrome DevTools melihat dengan baik variabel POST dari permintaan JSON.)
Saya mengembangkan hal ini untuk klien dan tidak dapat meminta mereka untuk menggunakan PHP terbaru, atau mengedit file php.ini. Sebagai upaya terakhir, saya hanya akan memeriksa apakah sudah diatur 0dan jika demikian, edit php.inifile dalam skrip PHP saya itu sendiri. Tentu saja saya harus meminta pengguna untuk merestart apache. Sayang sekali!
Berikut ini contoh kode:
<?php
if(ini_get('always_populate_raw_post_data') != '-1')
{
// Get the path to php.ini file
$iniFilePath = php_ini_loaded_file();
// Get the php.ini file content
$iniContent = file_get_contents($iniFilePath);
// Un-comment (if commented) always_populate_raw_post_data line, and set its value to -1
$iniContent = preg_replace('~^\s*;?\s*always_populate_raw_post_data\s*=\s*.*$~im', 'always_populate_raw_post_data = -1', $iniContent);
// Write the content back to the php.ini file
file_put_contents($iniFilePath, $iniContent);
// Exit the php script here
// Also, write some response here to notify the user and ask to restart Apache / WAMP / Whatever.
exit;
}