Tach!
Doch, doch, das Ergebnis ist genau dasselbe. Und DormData liefert überhaupt keinen Content-Type.
Da bist Du völlig falsch informiert.
Das ist lediglich eine Verwaltungsstruktur für Formulardaten.
Das ist Unsinn. Schau Dir bitte hier an, welchen Content-Type FormData liefert und wie FormData die Daten serialisiert.
Auch da sehe ich nicht, dass FormData irgendwelche Daten in einem bestimmten Content-Type liefert. Das FormData-Objekt wird da ebenfalls komplett an XMLHttpRequest.send() übergeben, und das ist alles für FormData. FormData definiert keinerlei Methoden, um Daten in einen bestimmten Content-Type umzuwandeln.
Entscheidend ist der Kontextwechsel! Und bei xhr.send(formdata)
heißt der Kontext String. Gesendet wird also ein String mit eben diesem Content-Type und genausogut kann man denselben String vom Server zum Browser senden und dort die Einzelnen Parts wiederherstellen.
Hinter dieser Magie steckt Overload/OOP, damit wird bei einem Kontextwechel implizit eine Methode aufgerufen. Andere PLs reichen diese Methode mit dem Namen toString()
nach draußen.
Daten gemäß einem bestimmten Content-Type im HTTP-Sinne entsteht erst bei weiterer Verarbeitung anderenorts,
OOP Overload ist hierzu das Zauberwort. Und genau das funktioniert auch nur weil die Daten bereits gemäß dem Enctype multipart/form-data in der FormDatainstanz vorliegen.
Das müsstest du beweisen. Und das wird schwer.
Meine oben verlinkte Anwendung zeigt es doch. Und hier in einer anderen Anwendung zeige ich Dir den umgekehrten Fall welchen die fetchAPI ermöglicht: Aus der Response die mit dem Enctype multipart/form-data gesendet wurde, eine FormData Instanz wiederherzustellen.
Das ist ja auch der Sinn von OOP interne Vorgänge über genau definierte Schnittstellen nach draußen zu reichen und zwar so daß sich in Anwender nicht darum kümmern muss was intern abläuft. Nun, daß FormData eine Methode toString()
nicht bereitstellt, heißt ja noch lange nicht, daß es eine Solche nicht gibt. Wer schon einmal OO entwickelt hat, wird jedoch wissen, daß es public und private Methods gibt.
Den Overload hier im Detail zu erklären würde jedoch schon sehr am Thema vorbeigehen. Aber zum Thema Kontextechsel gibt es ja einen Artikel in Eurem Wiki.
MfG