Je dois envoyer XML au serveur avec en-tête d'autorisation et ce DOIT être PUBLIER .
Maintenant, j'ai deux options.
Lorsque j'utilise dataType = 'jsonp', il devient toujours GET au lieu de POST. De plus, mes données doivent être XML.
var request = {};
request.type = 'POST';
request.contentType = 'application/jsonp; charset=utf-8';
request.dataType = 'jsonp';
request.data = JSON.stringify(this.data);
request.url = this.url;
request.beforeSend = function (xhr) {
xhr.setRequestHeader("Authorization", "Basic ");
};
request.processData = false;
$.ajax(request);
Mais sans dataType = 'jsonp', je n'ai pas du tout d'en-tête d'authentification. Le code suivant ne fonctionne que pour Chrome.
var request = {};
request.type = 'POST';
request.contentType = 'text/xml';
request.dataType = 'xml';
request.data = this.data;
request.url = this.url;
request.beforeSend = function (xhr) {
xhr.setRequestHeader("Authorization", "Basic ");
};
request.processData = false;
$.ajax(request);
Oui, je sais qu'il y a beaucoup de questions similaires sur StackOverflow et j'en ai lu des dizaines mais je ne trouve toujours pas la bonne réponse.
Modifiez les en-têtes dans la méthode beforeSend
, par exemple:
$.ajax({
url: url,
method: "POST",
dataType: "json",
crossDomain: true,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
cache: false,
beforeSend: function (xhr) {
/* Authorization header */
xhr.setRequestHeader("Authorization", "Basic " + Utils.getUsernamePassword());
xhr.setRequestHeader("X-Mobile", "false");
},
success: function (data) {
},
error: function (jqXHR, textStatus, errorThrown) {
}
});