Ich verwende die fetch
-api zum ersten Mal und Probleme beim Übergeben eines nicht-stringed JSON
Objekte an den Server. Grundsätzlich mag ich das gleiche Verhalten wie das erreichen:Nicht-String-Objekte mit Fetch senden
$.post(url, {"test": "test"}, function(response) {
console.log(response);
});
Die Abrufverfahren mit einem Web-API kommunizieren die unaccessable für mich und erwarte ein ebenes JSON
Objekt.
Normalerweise würde ich nur FormData
verwenden, um Daten an den Server übergeben, aber die JSON
wird in einen String umgewandelt werden [Object object]
: scheint
fetch(url, {
method: 'POST',
body: {"test": "test"}
})
.then(data => data.json())
.then(json => console.log(json))
.catch(e => console.error(e));
Der Körper Anfrage leer zu sein, wenn $_POST
mit (was, was ist es, die API verwendet), bietet jedoch den richtigen Wert bei der Verwendung von file_get_contents('php://input)
.
Ich hatte zwar etwas mit der falschen header
zu der Anfrage gegeben. Also habe ich versucht, den Header Ajax Beitrag verwendet: content-type:multipart/form-data;
. Das hat aber auch keinen Wert bekommen.
Ich fragte mich, ob dies ausdrücklich Absicht war, nicht einfach JSON
Objekt als Daten zu geben, oder dass ich einfach etwas fehlt?
Dies funktioniert, ist aber nicht erlaubt, da es eine stringify Version des JSON
Objekt ist:
var formData = new FormData();
formData.append('data', JSON.stringify(data));
fetch(url, {
method: 'POST',
body: formData
})
.then(data => data.json())
.then(json => console.log(json))
.catch(e => console.error(e));
Haben Sie einfach 'body: JSON.stringify (data)' versucht, da * JSON * nur ein einzelner Stringwert ist. Es ist nicht wirklich ein "Objekt" als solches – CodingIntrigue
@CodingIntrigue Es scheint, dass wenn ich 'formData' nicht verwende, es nicht mit' $ _POST' funktioniert. Deshalb dachte ich, dass "fetch-api" automatisch die Header der Einstellungen verwendet, wenn ich das 'formData'-Objekt verwende, aber ich habe keine Ahnung, welches. – nkmol
Äh, Ihr '$ .post'-Snippet sendet auch kein JSON? – Bergi