2013-02-23 16 views
27

Ottengo i dati di risposta, ma non riesco a ottenere i miei dati di intestazione HTTP personalizzati.Impossibile ottenere la risposta intestazione HTTP personalizzata da Ajax getAllResponseHeaders

Sì, questa è una richiesta interdominio. Sto facendo una richiesta Ajax con Javascript. Ho provato questo con XMLHttpRequest e anche jQuery $ .ajax. Ho fatto le impostazioni mio server, ho questi set, quando l'invio dei dati:

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

Io faccio ottenere i dati di risposta che voglio. Ma non riesco a ottenere la risposta completa dell'intestazione HTTP.

Con PHP, ho impostato quanto segue prima di inviare la risposta del testo. Quindi presumo che dovrei farlo con getAllResponseHeaders().

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

Ma ecco quello che ho ottenuto.

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

manca il My-Own-Test. Solo per amor di riferimento, ecco la mia 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); 

ho anche provato con jQuery ... stesso risultato.

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() ); 
}); 

Ancora ... senza fortuna.

Ma se vado attraverso Firebug o Chrome di strumento di sviluppo, posso vedere che questi strumenti fanno tornare tutte le informazioni di intestazione HTTP, inclusi Content-Length, Content-Encoding, Vary, X-Powered-By, Set-Cookie, Server, e, naturalmente, My-Own-Test.

+3

Immagino che questo dovrebbe essere di qualche aiuto http://stackoverflow.com/a/14689355/1236044 – jbl

+1

FANTASTICO !!! Era troppo facile. Ho il 'Access-Control-Allow-Headers', ma suppongo che mi mancasse' Access-Control-Expose-Headers'. Questo è stato. Grazie uomo. Ero tutto SO e non posso credere di averlo perso. Grazie ancora. Mi ha salvato un sacco di ore, forse giorni. –

+0

contento di essere stato di aiuto ;-) Non dimenticare di accettare la tua risposta – jbl

risposta

41

Voglio ringraziare jbl per avermi indirizzato alla giusta domanda SO. Ho capito subito ...

Quindi, OK ... la risposta. Se si desidera impostare le proprie informazioni HTTP Header e quindi recuperarle utilizzando Ajax interdominio, o qualcosa del genere, ecco alcune intestazioni HTTP aggiuntive da impostare sul lato server, prima di inviare il testo di risposta.

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

esempio precedente utilizza PHP. Ma usa la tua lingua, qualsiasi cosa tu usi per impostarli.

Quando ho posto questa domanda, avevo tutto questo tranne Access-Control-Expose-Headers. Dopo averlo inserito, il mio Javascript Ajax può leggere il contenuto dell'intestazione personalizzata dell'intestazione HTTP.

Problemi correlati