xmlhttp setrequestheader responsexml open metodo example ejemplo custom javascript jquery ajax cross-domain

javascript - setrequestheader - No se puede obtener una respuesta de encabezado HTTP personalizado de Ajax getAllResponseHeaders



xmlhttprequest javascript header (1)

Quiero agradecer a jbl por señalarme la pregunta correcta. Lo entiendo ahora...

Entonces, OK ... la respuesta. Si alguna vez quisiste establecer tu propia información de encabezado HTTP y luego buscarla usando Ajax de dominios cruzados, o algo así, aquí hay un encabezado HTTP adicional que debes establecer en tu servidor, antes de enviar el texto de respuesta.

header(''Access-Control-Allow-Origin: *''); header("Access-Control-Allow-Methods: POST, GET"); header(''Custom-Header: Own-Data''); header(''Access-Control-Expose-Headers: Custom-Header'');

El ejemplo anterior usa PHP. Pero usa tu propio idioma, lo que sea que uses para configurarlos.

Cuando hice esta pregunta, tenía todo eso excepto Access-Control-Expose-Headers . Después de poner eso, mi Javascript Ajax puede leer el contenido de encabezado personalizado de HTTP.

Obtengo los datos de respuesta, pero no puedo obtener mis datos de encabezado HTTP personalizados.

Sí, esta es una solicitud entre dominios. Estoy haciendo una solicitud de Ajax con Javascript. Lo he intentado con XMLHttpRequest y también con jQuery $ .ajax. He hecho mi configuración del servidor, tengo estos establecidos al enviar datos:

Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, GET

Obtengo los datos de respuesta que quiero. Pero no puedo obtener una respuesta de encabezado HTTP completa.

Con PHP, configuré lo siguiente antes de enviar la respuesta de texto. Así que supongo que debería obtenerlo con getAllResponseHeaders ().

header(''Expires: 0''); header(''Cache-Control: must-revalidate, post-check=0, pre-check=0''); header(''My-Own-Test: nodatahere'');

Pero esto es lo que obtuve.

Content-Type: text/plain; charset=x-user-defined Cache-Control: must-revalidate, post-check=0, pre-check=0 Expires: 0

Le falta My-Own-Test . Solo como referencia, aquí está mi Javascript:

var formData = new FormData(); formData.append(''username'', ''my_username''); formData.append(''book_id'', ''test password''); var xhr = new XMLHttpRequest(); xhr.open(''POST'', ''https://mydomain.com/proc.php'', true); xhr.overrideMimeType("text/plain; charset=x-user-defined"); xhr.onload = function(e) { console.log(this.getAllResponseHeaders()); }; xhr.send(formData);

Incluso lo intenté con jQuery ... el mismo resultado.

var data_to_send = { username: ''my_username'', password: ''test_password'' }; var ajaxObj; ajaxObj = $.ajax({ url: "https://mydomain.com/proc.php", data: data_to_send, type: "POST", beforeSend: function ( xhr ) { xhr.overrideMimeType("text/plain; charset=x-user-defined"); } }) .done(function ( data ) { console.log( ajaxObj.getAllResponseHeaders() ); });

Aún así ... sin suerte.

Pero si utilizo Firebug o Chrome''s Developer Tool, puedo ver que esas herramientas devuelven información completa del encabezado HTTP, incluyendo Content-Length , Content-Encoding , Vary , X-Powered-By , Set-Cookie , Server y, por supuesto, My-Own-Test .