2010-02-22 3 views
1

jQuery에서 AJAX 요청을 보내서 일부 검사를 실행 한 다음 다른 페이지로 리디렉션하거나 데이터를 반환해야합니다. 내 작업 파일에서 리디렉션을 강제로 수행 할 수 없다는 점을 제외하고는 모두 잘 작동합니다. 나는 시도했다 :Symfony : AJAX 호출에서 새 페이지로 리디렉션하는 방법은 무엇입니까?

$this->redirect('@new_page'); // DOESN'T WORK 

그리고를 ...

$this->context->getController()->redirect('@new_page'); // DOESN'T WORK 

내가 다시 JQuery와의 리디렉션 URL을 반환하고 거기에서 리디렉션하지만 난에 리디렉션을 처리하는 것을 선호 줄 수있는 방법이 있다고 생각 내 행동.

이것이 가능합니까?

감사

UPDATE :

위는 Ajax 요청에 다시 FALSE/TRUE를 반환하고 내 JQuery와 함수에 다음을 추가하는 것이 었습니다 최종 작업 솔루션 :

if(data == true) window.location.href = "<?php echo url_for('@new_page') ?>"; 
else // do other stuff 

새 페이지 URL은 동적 일 필요가 없으며 첫 번째 페이지로드시 삽입 할 수있었습니다. 이 경우, else 절에 대해 리턴 된 데이터에 대해 TRUE/FALSE가 충분합니다.

답변

2

AJAX 액션을 사용하면 일반적으로 페이지의 콜백 핸들러 또는 DIV 요소에 결과가 반환됩니다. 따라서 리디렉션을 사용하려고하면 AJAX 액션의 응답 만 참조되며 전체 HTTP 페이지 요청은 참조되지 않습니다. 리다이렉트는 symfony 내에서 잘 작동 할 것입니다. 반환하는 응답은 DIV이나 콜백 핸들러로 보내지며 HTML을 어떻게 처리해야할지 모릅니다. 실제로 AJAX 콜백 핸들러 내에서 리다이렉트 (redirect) 또는 새로 고침 (refresh)을 시작해야합니다.

당신은 error 콜백을 사용하여 오류 메시지 내용과 다른 DIV를 표시 찬성 전체 리디렉션을 피하는 고려할 수 있지만, 당신이 선호하는 경우이 error 콜백은, 너무 재 지정에 사용될 수 있습니다. 컨트롤러에 남아있는 동안

+0

완벽한 감지 감사를 만듭니다, 아래의 코드에 의해이 일을 처리 할 수 ​​있습니다. Jquery/콜백 리디렉션을 조사합니다. – Tom

1

나는

// some other code goes here 
// run this in special condition like if 
$url = $this->generateUrl('fos_user_security_login'); 
echo '<script>window.location = "'.$url.'";</script>';die; 
관련 문제