2012-06-27 20 views
16

Así que estoy tratando de obtener la ubicación de una respuesta de encabezado a través de jQuery get. Intenté usar getResponseHeader ('Location') y getAllResponseHeaders(), pero ambos parecen devolver null.¿Cómo obtener la ubicación del encabezado de respuesta de jQuery Get?

Aquí está mi código actual

$(document).ready(function(){ 
    var geturl; 
    geturl = $.ajax({ 
     type: "GET", 
     url: 'http://searchlight.cluen.com/E5/Login.aspx?URLKey=uzr7ncj8)', 
    }); 
    var locationResponse = geturl.getResponseHeader('Location'); 
    console.log(locationResponse); 
}); 
+0

Probablemente el duplicado de http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call –

Respuesta

25

Las cabeceras estarán disponibles cuando los asíncronos solicitud de devolución, por lo que tendrán que leerlos en el success callback:

$.ajax({ 
    type: "GET", 
    url: 'http://searchlight.cluen.com/E5/Login.aspx?URLKey=uzr7ncj8)', 
    success: function(data, status, xhr) { 
     console.log(xhr.getResponseHeader('Location')); 
    } 
}); 
+1

lo intentó sin suerte. La URL no está devolviendo una declaración de éxito. Intenté imprimirlo también en falso y sin suerte – raeq

+3

intente a 'complete: function (xhr) {console.log (xhr.getAllResponseHeaders()); } ' – Bergi

+3

Todavía obtengo una cadena vacía o nula http://jsfiddle.net/nNwGL/1/ – raeq

3

para algunas cabeceras en jQuery Ajax necesita acceder al objeto XMLHttpRequest

var xhr; 
var _orgAjax = jQuery.ajaxSettings.xhr; 
jQuery.ajaxSettings.xhr = function() { 
    xhr = _orgAjax(); 
    return xhr; 
}; 

$.ajax({ 
    type: "GET", 
    url: 'http://example.com/redirect', 
    success: function(data) { 
     console.log(xhr.responseURL); 
    } 
}); 

o el uso de JavaScript llanura

var xhr = new XMLHttpRequest(); 
xhr.open('GET', "http://example.com/redirect", true); 

xhr.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
    console.log(xhr.responseURL); 
    } 
}; 

xhr.send(); 
-1

jQuery abstrae el objeto XMLHttpRequest en un llamado "super conjunto" que no exponga el campo responseURL. Está en sus documentos, donde se habla del "objeto jQuery XMLHttpRequest (jqXHR)"

For backward compatibility with XMLHttpRequest, a jqXHR object will expose the following properties and methods: 

readyState 
responseXML and/or responseText when the underlying request responded with xml and/or text, respectively 
status 
statusText 
abort([ statusText ]) 
getAllResponseHeaders() as a string 
getResponseHeader(name) 
overrideMimeType(mimeType) 
setRequestHeader(name, value) which departs from the standard by replacing the old value with the new one rather than concatenating the new value to the old one 
statusCode(callbacksByStatusCode) 
No onreadystatechange mechanism is provided, however, since done, fail, always, and statusCode cover all conceivable requirements. 

Como se puede ver, no hay manera de controlar la URL de respuesta porque la API jqXHR no exponga

Cuestiones relacionadas