Ich habe Postman (den, der sich nicht in Chrome öffnet) und ich versuche, eine POST - Anfrage mit rohem Json auszuführen.
Im Body-Tab habe ich "raw" und "JSON (application/json)" mit diesem Body ausgewählt:
{
"foo": "bar"
}
Für die Kopfzeile habe ich 1, Content-Type: application/json
Auf der Seite PHP mache ich gerade print_r($_POST);
und erhalte ein leeres Array.
Wenn ich jQuery verwende und Folgendes mache:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Ich bekomme wie erwartet:
Array
(
[foo] => bar
)
Warum arbeitet sie nicht mit Postman zusammen?
Postman-Screenshots:
und Kopfzeile:
Im Gegensatz zu jQuery
müssen Sie es in PHP dekodieren, um rohe JSON
lesen zu können.
print_r(json_decode(file_get_contents("php://input"), true));
php://input
ist ein schreibgeschützter Stream, mit dem Sie Rohdaten aus dem Anforderungstext lesen können.
$_POST
ist eine Formularvariable. In form
müssen Sie zu postman
radiobutton wechseln und dann Folgendes verwenden:
foo=bar&foo2=bar2
Um json
mit jquery
zu posten:
$.ajax({
"url": "/rest/index.php",
'data': JSON.stringify({foo:'bar'}),
'type': 'POST',
'contentType': 'application/json'
});
die Antwort von meda ist absolut legitim, aber als ich den Code kopiert hatte, bekam ich einen Fehler!
Irgendwo im "php://input"
gibt es ein ungültiges Zeichen (vielleicht eines der Anführungszeichen?).
Als ich den "php://input"
-Code manuell eingegeben habe, hat er funktioniert
Ich hatte das gleiche Problem, der folgende Code hat für mich funktioniert:
$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);
Installieren Sie die native Postman-App. Die Chrome-Erweiterung wurde nicht mehr empfohlen