2009-11-03 3 views
5

저는 ajax 양식 jquery 플러그인을 사용하여 ajax를 통해 양식을 (대화 상자에) 제출하고 있습니다.jquery ajax form - 리디렉션 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)을 인쇄하면 다음과 같이 인쇄됩니다. Object aborted = 0 (connetion이 잘되더라도) – gpilotino

+0

Strange. 그렇다면 xhr 객체에는 무엇이 포함되어 있습니까? –

+0

"iframe"옵션 (xhr mock 객체 사용)과 함께 사용하면 ajax 양식 플러그인의 "버그"처럼 보입니다. 한 번 그 옵션을 제거 이제 올바른 HTTP 헤더를 얻을 수 있지만 "위치"헤더가 누락되었습니다 그래서 난 여전히 URL을 얻을하지 않습니다. – gpilotino

관련 문제