Ich habe Postman (der in Chrome nicht geöffnet wird) und versuche, eine POST-Anfrage mit raw json zu erstellen.
Auf der Registerkarte Body habe ich "raw" ausgewählt und "JSON (application / json)" mit diesem Body:
{
"foo": "bar"
}
Für den Header habe ich 1, Content-Type: application/json
Auf der PHP-Seite mache ich das gerade print_r($_POST);
und bekomme ein leeres Array.
Wenn ich jQuery verwende und Folgendes tue:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Ich bekomme wie erwartet:
Array
(
[foo] => bar
)
Warum funktioniert es nicht mit Postman?
Postboten-Screenshots:
und Header:
array(1) {["foo"]=> string(3) "bar"}
mit jQuery und noch ein leeres Array mit Postman:array(0) {}
fields
und wirdfoo
nicht übereinstimmen, daher wird es nicht funktionieren. Ich bin nicht sicher, ob es ein Tippfehler ist, aber stellen Sie sicher, dass sie übereinstimmenAntworten:
Anders als
jQuery
zum Lesen von Raw müssenJSON
Sie es in PHP dekodieren.php://input
ist ein schreibgeschützter Stream, mit dem Sie Rohdaten aus dem Anforderungshauptteil lesen können.$_POST
form
Wenn es sich um Formularvariablen handelt, müssen Sie zum Radiobutton wechseln und dann Folgendespostman
verwenden:So posten Sie roh
json
mitjquery
:quelle
Aktivieren Sie einfach die JSON-Option in der Dropdown-Liste neben "Binär". wenn Sie auf raw klicken. Das sollte reichen
quelle
Die Antwort von meda ist völlig legitim, aber als ich den Code kopierte, bekam ich einen Fehler!
Irgendwo in der
"php://input"
gibt es ein ungültiges Zeichen (vielleicht eines der Anführungszeichen?).Wenn ich den
"php://input"
Code manuell eingegeben habe , hat es funktioniert. Ich habe eine Weile gebraucht, um das herauszufinden!quelle
200c 200b
(Zeichen mit einer Breite von Null) zwischen "n" und "p" in "Eingabe" liegt. Ich bin mir nicht sicher, wie er dazu gekommen ist, aber es ist jetzt behoben.Ich hatte das gleiche Problem, der folgende Code funktionierte für mich:
quelle
Installieren Sie die native Postman-App. Die Chrome-Erweiterung ist veraltet. (Meins öffnete sich in einem eigenen Fenster, lief aber immer noch als Chrome-App)
quelle