2009-11-03 21 views
5

私はajaxフォームjqueryプラグインを使ってajax経由でフォームを(ダイアログ内で)送信しています。jquery ajaxフォーム - リダイレクトURLの取得方法

これは正常に動作し、私はサーバーからHTML応答を返します。応答は私が変更できない標準のリダイレクト後ポストPHPページから来ます。

jQuery(ajaxコールバック内)を使用してこのリダイレクト(最終的なGETの場所)のURLを取得する方法はありますか?

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

答えて

2

私が使用していないプラグインあなたがjQuery Ajax commandを使用する場合、使用している、しかし、あなたはcompleteイベントにパラメータとしてXMLHttpRequestオブジェクトを受け取ります。返信するHTTPヘッダーから投稿URLを取得できます。次のことを試してみてください。

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

このコードはthis threadからコピーされました。

+0

完全なハンドラ+ xhr.getResponseHeaderまたはgetAllResponseHeadersで試してみましたが、「未定義」を返します。私がconsole.log(xhr)を実行した場合、以下のように表示されます:オブジェクトは中止されました= 0(接続がうまくいっても) – gpilotino

+0

Strange。それではxhrオブジェクトには何が入っていますか? –

+0

"iframe"オプション(xhrモックオブジェクトを使用)で使用すると、ajaxフォームプラグインの「バグ」のように見えます。一度そのオプションを取り除くと、正しいhttpヘッダーが取得されますが、「Location」ヘッダーが見つからないため、URLはまだ取得されません。 – gpilotino

関連する問題