ho provato entrambe le cose separatamente:XMLHttpRequest/ajax set Content-Type
nota: url è una variabile che contiene un URL HTTPS e jsonString contiene una stringa JSON valida
var request = new XMLHttpRequest();
try{
request.open("POST", url);
request.setRequestHeader('Accept', 'application/json');
request.send(jsonString);
} catch(e) {
alert(e);
}
e
var options = {
type: "POST",
url: url,
dataType: "json",
data: jsonString,
accept: "application/json"
};
$.ajax(options)
Il problema è che il sistema che stiamo postando richiede un'intestazione Content-Type con un valore "application/json".
Con il modo in cui stanno le cose in questo momento, il metodo utilizzato è POST, l'intestazione Accept è "application/json", e le impostazioni predefinite Content-Type a "/ x-www-form-urlencoded domanda; charset = UTF 8 "
Nel primo esempio, se request.setRequestHeader ('Content-Type', 'application/json'); viene aggiunta 1 riga sopra o sotto l'intestazione Accept, il metodo utilizzato cambia in OPTIONS, l'intestazione Accept cambia in "text/html, application/xhtml + xml, application/xml; q = 0.9, /; q = 0.8" e l'intestazione Content-Type scompare come se non fosse stata vista.
Nel secondo esempio, se contentType: "application/json" viene aggiunto ovunque all'interno delle opzioni, accade la stessa cosa che è accaduta nel primo esempio.
Qual è il modo corretto di impostare un'intestazione Content-Type in ajax o XMLHttpRequest?
Edit: Vorrei aggiungere che utilizzando il plugin client resto firefox, la stringa JSON, url, e accettare e intestazioni content type tutti funzionano bene. Sembra che non riusciamo a ottenere l'intestazione del contenuto impostata sulla nostra pagina.
Hai un esempio di jsfiddle? Non ho mai usato l'oggetto XMLHttpRequest prima, ma l'impostazione contentType su "application/json" dovrebbe funzionare con jquery. Inoltre, non penso ci sia un'impostazione "accetta". Inoltre, una richiesta di verifica preliminare OPZIONI si verifica quando si effettua una chiamata interdominio. È quello che stai facendo? – georaldc
Voglio dire, un preflight OPTIONS si verifica quando si effettua una chiamata interdominio con un valore del tipo di contenuto diverso da quello predefinito "application/x-www-form-urlencoded; charset = UTF-8" con JQuery.ajax() – georaldc