2010-07-08 9 views
11

으로 리디렉션되는 위치를 찾으십시오.이 Ajax 요청을 참조하십시오. , 약 6 피트 정도의 키, 금발은 다음과 같습니다 : 'getThing/ABC123를'Jquery ajax 요청이

$.ajax({ 
    url: 'http://example.com/makeThing', 
    dataType: 'html', 
    type: 'POST', 
    data: { 
     something:someotherthing 
    }, 
    complete: function(request, status) { 
     console.log("headers=" + request.getAllResponseHeaders();); 
    } 
}); 

무엇 발생하는 '/ makeThing'에 대한 요청이 302 번째 URL로 리디렉션 반환합니다. 내가하고 싶은 것은 그 두 번째 URL이 무엇인지 알아내는 것입니다 (프로그램 적으로는 매번 다를 것입니다. 그래서 방화범을 끄는 것이 도움이되지 않습니다). 'complete'콜백으로 돌아 오는 응답 헤더를 연결하려고 시도했지만 두 번째 요청에서 돌아온 응답을 제공합니다.

제약 조건 : -이 서버에서 실행되는 서버는 제어 할 수 없습니다. 단지 js입니다. - (dojo? prototype?)해야 할 경우 Switch Switch Framework가 필요합니다.

이상적으로는/makeThing에 대한 일종의 헤더 전용 요청을 통해 리다이렉트 URL이 무엇인지 찾아야합니다. 초기 302 응답.

jquery 자동 리디렉션을 따르고 요청 사이에 들어갈 수있는 방법이없는 것 같으므로 최종 응답을 검색하여 어떻게 든 URL을 가져 오는 데 사용할 수 있습니까? 요청 개체, 아마도?

TLDR : Ajax 요청을 보냅니다. 프레임 워크는 자동으로 결과 302 리디렉션을 따릅니다. 리디렉션 된 위치는 어떻게 알 수 있습니까?

편집, 명확한 설명 : 가 최종 URL이 다를 수 있습니다 모든 시간 - 호출 'makeThing은'후 'getThing/ABC123'

+0

방화범 확인으로 확인하십시오. –

답변

0

왜 그냥 URL을 연결하지 마십시오에서 호스팅되는 것을 만들 수있는 서버의 원인 'http://example.com/makeThing'을 (를) 브라우저에 연결 한 다음 어디에서 볼 수 있습니까?

+0

리디렉션은 데이터에 따라 달라질 수 있습니다 (즉, 유효한 경우) -> 다음 페이지로 리디렉션합니다. 유효하지 않은 경우 -> 페이지로 리디렉션하십시오. 또한 일반 요청 대신 XHR 인 경우 다르게 작동 할 수도 있습니다. 예를 들어 Rails에서는 흔하지 않습니다. –

+0

나의 수정에서 언급했듯이 최종 URL은 makeThing에 대한 모든 요청에 ​​매우 중요합니다. makeThing은 'abc123'이라는 ID를 가진 '물건'을 생성하며, 이후 getThing/abc123에서 액세스 할 수 있습니다. 따라서 프로그래밍 방식으로 액세스해야하는 이유는 무엇입니까? – Fishtoaster

0

파이어 버그를 부팅 한 다음 콘솔을 열면 요청이 실제로 진행되는 곳을 따라갈 수 있습니다. AJAX 요청 처리가 완료되면 해당 콘솔 항목을 확장하면 관련 요청 및 응답 헤더가 표시됩니다.

+0

죄송합니다.이 지점에서 특히 명확하지 않은 경우 makeThing은 생성자 함수입니다. 리디렉션되는 곳이 달라 지므로 프로그래밍 방식으로이 작업을 수행해야합니다. – Fishtoaster

4

가능하다면, 당신의 서버가 "current-location" 헤더를 설정 예를 들어 해당 페이지 (대상 페이지가 아닌 리디렉션 일)에 헤더를 설정 한 후, 당신은이 작업을 수행 할 수 있습니다

$.ajax({ 
    url: 'http://example.com/makeThing', 
    dataType: 'html', 
    type: 'POST', 
    data: { 
     something:someotherthing 
    }, 
    complete: function(request, status) { 
     var location = request.getResponseHeader("current-location"); 
    } 
}); 

예,이 입니다. 그러나 해킹은 XmlHttpRequest 개체 (액세스 할 수없는 이벤트)에서 내부적으로 처리되므로 많은 선택권이 없습니다. ,

Location 헤더에 의해 전달되는 URL의 기원은 XMLHttpRequest의 기원과 같은 기원하고 리디렉션 무한 루프주의 사항을 위반하지 않는 경우

You can check the spec이는 는 XMLHttpRequest의에 대한 행동을 의도 동일한 출발지 요청 이벤트 규칙을 준수하면서 투명하게 리디렉션을 따르십시오.

+1

서버에 대한 액세스 권한이 있으면 작동합니다. :(내가 바꿀 수있는 것은 모두 자바 스크립트입니다.) – Fishtoaster

+2

@Fishtoaster - AFAIK, 당신은 어떤 옵션도 가지고 있지 않습니다. 이것은 적어도 크로스 브라우저에 노출되어 있지 않습니다. 어떤 페이지인지 파악할 수 있습니까? on 또는 some alternative approach? –

+0

아마 내가해야 할 일일 것입니다. – Fishtoaster

2

이 특정 상황에 도움이되지 않을 수 있습니다,하지만 난 같은 문제가 있었을 때 나는 리디렉션은 HTML에 단서 한 이후에 결국 페이지를 발견 :

<meta property="og:url" content="THE_URL_OF_THE_PAGE" /> 

일부 페이지는 스크립트가를 그 (것)들의 단편은 Facebook 논평 추가를 위해 사용하고, 그 (것)들은 때때로 또한 현재 URL를 포함 할 수있다. 또는 심지어 노골적으로이 같은 :

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE"> 
0

정말 우리가 헤더를 잡을 수없는 너무 나쁜 ...하지만 매그너스가 지적했듯이, 당신은 드릴 것입니다 해당 페이지에서 몇 가지 독특한 컨텐츠를 읽으려고 수 실제로 어떤 페이지가 사용자에게 라우팅되었는지 결정합니다.

관련 문제