Como redirect do controlador para visualizar no CodeIgniter?

Foi realmente difícil formular o título desta questão. Vou começar com um trecho de código:

[..] register [..]  $(document).ready(function(){ $('#register-link').on('click',function(){ $.get(baseurl + 'index.php/auth/register', function(response){ $('#popup-div').html(response); }); }); });  

O método de controle auth / register termina com:

 $this->load->view('auth/register_form', $data); 

A idéia básica é que, quando o usuário clicar em “registrar” no menu, aparece um pop-up em vez de carregar uma nova página. O registro funciona.

No entanto, existem duas formas como o método auth / register pode terminar:

 function register() { // a bunch of $this->form_validation->set_rules(); // and other server side logic if ($this->form_validation->run()) { // server side logic redirect('auth'); } else{ //getting same $data $this->load->view('auth/register_form', $data) } } 

Então, o problema é que, se eu tiver erros de validação (a validação do formulário não é executada e recebo resposta html), uma nova página é carregada com o formulário que mostra erros ao invés de fazer isso no pop-up. Se o registro for bem-sucedido, recebo o novo recarregamento de página apenas para mostrar ao usuário que o registro foi bem-sucedido, o que é irritante. Então eu quero verificar se o controlador redireciona e passa esse URL de redirecionamento para a mesma div.

Eu procurei as mesmas perguntas semelhantes, mas não consegui-lo funcionar. Até agora eu tenho isso:

 $(document).ready(function(){ $('#register-link').on('click',function(){ $.get(baseurl + 'index.php/auth/register', function(response){ if (response.redirect) { //alert(response.redirect); $.get(response.redirect, function(response2){ $('#popup-div').html(response2); }); } else { $('#popup-div').html(response); } }); }); }); 

mas nada muda e não recebo erros. Se eu entender o problema corretamente, então a chamada é feita apenas uma vez, então eu sempre obtive a visão. Tentei remover $(document).ready(function(){ ... }); parte, mas ainda nada. Se eu tentar append a binding ajax a cada “enviar”, eu (penso) vai estragar as validações.

UPDATE: Dos comentários abaixo, entendi que poderia ser mais fácil trabalhar dentro do controlador de autenticação de tanques. Primeiro vou mostrar uma seqüência completa como o Tank auth redireciona. Autenticação interna / registro é na verdade

 $this->_show_message($this->lang->line('auth_message_registration_completed_1')); 

Onde:

 function _show_message($message) { $this->session->set_flashdata('message', $message); redirect('/auth/'); } 

e:

 function index() { if ($message = $this->session->flashdata('message')) { $this->load->view('auth/general_message', array('message' => $message)); } else { redirect('/auth/login/'); } } 

A idéia por trás disso é que _show_message é chamado em 17 situações diferentes com mensagens diferentes para exibição. Eu quero lidar com todas essas situações dentro do meu popup div. Eu tentei mudar:

 $this->_show_message_JSON($this->lang->line('auth_message_registration_completed_1')); 

Onde:

 function _show_message_JSON($message) { $this->session->set_flashdata('message', $message); $data['redirect'] = '1'; header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-Type: application/json'); echo json_encode($data); } 

e lidar com lógica em JS:

 $(document).ready(function(){ $('#register-link').on('click',function(){ $.get(baseurl + 'index.php/auth/register', function(response){ if(typeof response == 'object'){ //alert(response); $.get(baseurl + 'index.php/auth', function(response2){ $('#popup-div').html(response2); }); } else { $('#popup-div').html(response); } }); }); }); 

No entanto, o que recebo se a validação estiver correta é:

 {"redirect":"1"} 
[...]

que é basicamente o código-fonte, exceto com a primeira linha anexada.