2009-11-03 4 views
5

J'utilise ajax form jquery plugin pour soumettre un formulaire (dans une boîte de dialogue) via ajax.jquery ajax form - comment obtenir l'URL de redirection?

cela fonctionne bien, puis-je obtenir la réponse HTML à partir du serveur. la réponse provient d'une page standard php redirection après publication que je ne peux pas modifier.

est-il un moyen d'obtenir l'url de cette redirection (la finale de l'emplacement GET) en utilisant jquery (dans le rappel 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; 
    }); 

Répondre

2

Je ne l'ai pas utilisé le plug-in que vous utilisez, mais si vous utilisez le jQuery Ajax command, vous recevez l'objet XMLHttpRequest en tant que paramètre à l'événement complete. Vous pouvez ensuite obtenir l'URL du message à partir de l'en-tête HTTP renvoyé. Effectuez les actions suivantes:

$.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]); 
     } 
    } 
    } 
}); 

Ce code a été copié à partir this thread.

+0

je l'ai essayé avec le gestionnaire complet + xhr.getResponseHeader ou getAllResponseHeaders et retourne « undefined ». si je fais console.log (xhr) il imprime: Objet abandonné = 0 (même si la connexion se passe bien) – gpilotino

+0

Étrange. Qu'est-ce que l'objet xhr contient alors? –

+0

il semble que ce soit un "bug" du plugin ajax form lorsqu'il est utilisé avec l'option "iframe" (il utilise un objet mock xhr). Une fois débarrassé de cette option maintenant, j'obtiens les en-têtes http corrects mais l'en-tête "Location" est manquant donc je n'ai toujours pas l'URL. – gpilotino