Ich habe versucht, diese beiden Dinge getrennt:XMLHttpRequest/Ajax-Set Content-Type
Anmerkung: url ist eine Variable, eine https-URL und jsonString enthält einen gültigen JSON-String
var request = new XMLHttpRequest();
try{
request.open("POST", url);
request.setRequestHeader('Accept', 'application/json');
request.send(jsonString);
} catch(e) {
alert(e);
}
und
enthältDas Problem ist das System, das wir buchen, erfordert eine Überschrift Content-Type mit einem Wert "application/json".
Mit der Art, wie die Dinge jetzt sind, ist die verwendete Methode POST, der Accept-Header ist "application/json" und der Content-Type-Standardeinstellungen "application/x-www-form-urlencoded; charset = UTF- 8 "
Im ersten Beispiel, wenn request.setRequestHeader ('Content-Type', 'application/json'); Wird 1 Zeile über oder unter dem Accept-Header hinzugefügt, ändert sich die verwendete Methode zu OPTIONS, der Accept-Header ändert sich zu "text/html, application/xhtml + xml, application/xml; q = 0,9, /; q = 0,8" und der Content-Type-Header verschwindet, als ob er nicht gesehen wurde.
Im zweiten Beispiel, wenn contentType: "application/json" irgendwo innerhalb von Optionen hinzugefügt wird, passiert das gleiche wie im ersten Beispiel.
Was ist der richtige Weg, um einen Content-Type-Header in Ajax oder XMLHttpRequest zu setzen?
Edit: Ich sollte hinzufügen, dass mit dem Firefox-Rest-Client-Plugin, die JSON-Zeichenfolge, URL und akzeptieren und Content-Typ-Header alle gut funktionieren. Wir können den Inhaltsheader einfach nicht auf unserer eigenen Seite erscheinen lassen.
Haben Sie ein Beispiel? Niemals zuvor das XMLHttpRequest-Objekt verwendet, aber die Einstellung contentType auf "application/json" sollte für jquery funktionieren. Ich denke auch nicht, dass es eine "akzeptieren" -Einstellung gibt. Eine OPTIONS-Preflight-Anforderung tritt auch auf, wenn ein domänenübergreifender Aufruf ausgeführt wird. Machst du das? – georaldc
Ich meine, ein OPTIONS-Preflight tritt auf, wenn ein domainübergreifender Aufruf mit einem Inhaltstyp-Wert anders als als der Standard "application/x-www-form-urlencoded; charset = UTF-8" mit JQuery.ajax() – georaldc