Mam Postmana (tego, który nie otwiera się w Chrome) i próbuję wykonać żądanie POST przy użyciu surowego json.
Na karcie Body mam zaznaczone „raw” i „JSON (application / json)” z tym treścią:
{
"foo": "bar"
}
Dla nagłówka mam 1, Content-Type: application/json
Po stronie PHP robię print_r($_POST);
na razie i otrzymuję pustą tablicę.
Jeśli używam jQuery i robię:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Otrzymuję zgodnie z oczekiwaniami:
Array
(
[foo] => bar
)
Dlaczego więc nie działa z Postmanem?
Zrzuty ekranu listonosza:
i nagłówek:
array(1) {["foo"]=> string(3) "bar"}
z jQuery i nadal pustą tablicę z Postmanem:array(0) {}
fields
ifoo
nie pasuje, więc nie zadziała, nie jestem pewien, czy to literówka, ale upewnij się, że pasująOdpowiedzi:
W przeciwieństwie
jQuery
do czytania surowegoJSON
, będziesz musiał zdekodować go w PHP.php://input
jest strumieniem tylko do odczytu, który umożliwia odczyt surowych danych z treści żądania.$_POST
to zmienne formularza, będziesz musiał przełączyć się naform
radiobutton,postman
a następnie użyj:Aby opublikować surowy za
json
pomocąjquery
:źródło
Po prostu zaznacz opcję JSON z listy rozwijanej obok binarnej; kiedy klikniesz „raw”. To powinno wystarczyć
źródło
odpowiedź meda jest całkowicie poprawna, ale kiedy skopiowałem kod, wyskoczył mi błąd!
Gdzieś w tekście
"php://input"
znajduje się nieprawidłowy znak (może jeden z cudzysłowów?).Kiedy wpisałem
"php://input"
kod ręcznie, zadziałało. Zajęło mi trochę czasu, zanim się zorientowałem!źródło
200c 200b
(znaki o zerowej szerokości) między „n” i „p” w polu „wejście”. Nie jestem pewien, jak skończył z tym, ale teraz jest to naprawione.Miałem ten sam problem, działał dla mnie następujący kod:
źródło
Zainstaluj natywną aplikację Postman. Rozszerzenie Chrome zostało wycofane. (Mój otwierał się we własnym oknie, ale nadal działał jako aplikacja Chrome)
źródło