javascript - letra - ¿Cómo puedo agregar un encabezado HTTP personalizado a la solicitud ajax con js o jQuery?
jquery replace text (8)
¿Alguien sabe cómo agregar o crear un encabezado HTTP personalizado usando JavaScript o jQuery?
Aquí hay un ejemplo usando XHR2:
function xhrToSend(){
// Attempt to creat the XHR2 object
var xhr;
try{
xhr = new XMLHttpRequest();
}catch (e){
try{
xhr = new XDomainRequest();
} catch (e){
try{
xhr = new ActiveXObject(''Msxml2.XMLHTTP'');
}catch (e){
try{
xhr = new ActiveXObject(''Microsoft.XMLHTTP'');
}catch (e){
statusField(''/nYour browser is not'' +
'' compatible with XHR2'');
}
}
}
}
xhr.open(''POST'', ''startStopResume.aspx'', true);
xhr.setRequestHeader("chunk", numberOfBLObsSent + 1);
xhr.onreadystatechange = function (e) {
if (xhr.readyState == 4 && xhr.status == 200) {
receivedChunks++;
}
};
xhr.send(chunk);
numberOfBLObsSent++;
};
Espero que ayude.
Si crea su objeto, puede usar la función setRequestHeader para asignar un nombre y un valor antes de enviar la solicitud.
Debe evitar el uso de $.ajaxSetup()
como se describe en los docs . Use lo siguiente en su lugar:
$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
jqXHR.setRequestHeader(''my-custom-header'', ''my-value'');
});
Hay varias soluciones dependiendo de lo que necesites ...
Si desea agregar un encabezado personalizado (o un conjunto de encabezados) a una solicitud individual , simplemente agregue la propiedad de headers
:
// Request with custom header
$.ajax({
url: ''foo/bar'',
headers: { ''x-my-custom-header'': ''some value'' }
});
Si desea agregar un encabezado predeterminado (o un conjunto de encabezados) a cada solicitud , use $.ajaxSetup()
:
$.ajaxSetup({
headers: { ''x-my-custom-header'': ''some value'' }
});
// Sends your custom header
$.ajax({ url: ''foo/bar'' });
// Overwrites the default header with a new header
$.ajax({ url: ''foo/bar'', headers: { ''x-some-other-header'': ''some value'' } });
Si desea agregar un encabezado (o un conjunto de encabezados) a cada solicitud , use el beforeSend
con $.ajaxSetup()
:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader(''x-my-custom-header'', ''some value'');
}
});
// Sends your custom header
$.ajax({ url: ''foo/bar'' });
// Sends both custom headers
$.ajax({ url: ''foo/bar'', headers: { ''x-some-other-header'': ''some value'' } });
Editar (más información): Una cosa a tener en cuenta es que con ajaxSetup
solo puede definir un conjunto de encabezados predeterminados y solo puede definir uno antes de beforeSend
. Si llama ajaxSetup
varias veces, solo se enviará el último conjunto de encabezados y solo se ejecutará la última devolución de llamada antes del envío.
O, si desea enviar el encabezado personalizado para cada solicitud futura, puede usar lo siguiente:
$.ajaxSetup({
headers: { "CustomHeader": "myValue" }
});
De esta manera, todas las solicitudes futuras de ajax contendrán el encabezado personalizado, a menos que las opciones de la solicitud lo invaliden explícitamente. Puedes encontrar más información sobre ajaxSetup
here
Se debe utilizar el método "setRequestHeader" del objeto XMLHttpRequest
Suponiendo que JQuery ajax, puede agregar encabezados personalizados como:
$.ajax({
url: url,
beforeSend: function(xhr) {
xhr.setRequestHeader("custom_header", "value");
},
success: function(data) {
}
});
Suponiendo que te refieres a "Al usar ajax" y "Un encabezado de solicitud HTTP", entonces usa la propiedad de headers
en el objeto que pasas a ajax()
encabezados (añadido 1.5)
Predeterminado:
{}
Un mapa de pares clave / valor de encabezado adicionales para enviar junto con la solicitud. Esta configuración se establece antes de que se llame a la función beforeSend; por lo tanto, cualquier valor en la configuración de encabezados puede sobrescribirse desde dentro de la función beforeSend.
También puedes hacer esto sin usar jQuery. Sobrescriba el método de envío de XMLHttpRequest y agregue el encabezado allí:
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
this.setRequestHeader(''x-my-custom-header'', ''some value'');
this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;