2009-11-03 24 views
5

estoy usando ajax form jquery plugin para enviar un formulario (en un diálogo) a través de ajax.jquery ajax form - cómo obtener la URL de redirección?

esto funciona bien y luego recibo la respuesta html del servidor. la respuesta proviene de una página php de redirect-after-post estándar que no puedo modificar.

¿hay alguna manera de obtener la URL de esta redirección (la ubicación GET final) usando jquery (dentro de la devolución de llamada ajax)?

$j('span.sfAutocomplete a').click(function(e){ 
    var url = this.href; 
    var $dialog = $j('<div id="ajaxDialog"></div>').appendTo('body') 
    .load(
     url, 
     'sfAutocomplete=true', 
     function (responseText, textStatus, XMLHttpRequest) { 
     $dialog.dialog({ autoOpen: true }); 
     // 
     // Ajax submit 
     // 
     $j('#ajaxDialog form').submit(function() { 
      function showResponse(responseText, statusText) { 

      // how to get the redirect url ? 

      } 
      $j(this).ajaxSubmit({ 
      success: showResponse 
      }); 
      return false; 
     }); 
     } 
    ); 
    return false; 
    }); 

Respuesta

2

No he utilizado el plug-in que está utilizando, pero si se utiliza el jQuery Ajax command, recibirá el objeto XMLHttpRequest como un parámetro para el evento complete. A continuación, puede obtener la URL posterior del encabezado HTTP que devuelve. Pruebe lo siguiente:

$.ajax({ 
    url:'your.url', 
    data:'your data', 
    complete: function(xhr,textstatus) { 
    // xhr.responseText contains the response from the server 
    var allheaders = xhr.getAllResponseHeaders(); 
    // this will get all headers as a string - if you want them as an object... 
    var eachheader = allheaders.split('\n'); 
    var headers = {}; 
    for(i = 0; i < eachheader.length; i++) { 
     if ($.trim(eachheader[i]) !== '') { 
      headersplit = eachheader[i].split(':'); 
      headers[headersplit[0]]=$.trim(headersplit[1]); 
     } 
    } 
    } 
}); 

Este código fue copiado de this thread.

+0

lo he intentado con el controlador completo + xhr.getResponseHeader o getAllResponseHeaders y devuelve 'indefinido'. si hago console.log (xhr) imprime: Objeto abortado = 0 (incluso si la conexión funciona bien) – gpilotino

+0

Extraño. ¿Qué contiene el objeto xhr entonces? –

+0

Parece que era un "error" del complemento de formulario ajax cuando se usa con la opción "iframe" (usa un objeto simulado xhr). Una vez que me deshago de esa opción, ahora obtengo los encabezados http correctos, pero falta el encabezado "Ubicación", así que todavía no obtengo la URL. – gpilotino

Cuestiones relacionadas