#javascript #jquery #ajax #fancybox-2
#javascript #jquery #ajax #fancybox-2
Вопрос:
Я использую всплывающее окно jquery fancy box …. для всплывающего окна…. Но когда я отправляю … мою форму, которая перенаправляет в тот же window…..in всплывающее окно.. Я хочу перенаправить свою страницу в другое открытое окно …. не в том же всплывающем окне…
Я использовал target blank .. но он работает каждый раз .. при нажатии … мне нужно перенаправить, когда я получу свой логин…. Я создаю свой проект в codeigniter…..
мой контроллер….
public function login()
{
if ( $this->input->post('action') )
{
$this->form_validation->set_rules('user_name', 'Username','required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required|');
if ($this->form_validation->run() == TRUE)
{
$username = $this->input->post('user_name');
$password = $this->input->post('password');
$rember = ($this->input->post('remember')!="") ? TRUE : FALSE;
if( $this->input->post('remember')=="Y" )
{
set_cookie('userName',$this->input->post('user_name'), time() 60*60*24*30 );
set_cookie('pwd',$this->input->post('password'), time() 60*60*24*30 );
}
else
{
delete_cookie('userName');
delete_cookie('pwd');
}
$this->auth->verify_user($username,$password);
if( $this->auth->is_user_logged_in() )
{
if( $this->session->userdata('ref')!="" )
{
redirect($this->session->userdata('ref'),'');
}
else
{
redirect('members/myaccount','refresh');
}
}
else
{
$this->session->unset_userdata(array("ref"=>'0'));
$this->session->set_userdata(array('msg_type'=>'error'));
$this->session->set_flashdata('error',$this->config->item('login_invalid'));
redirect('users/login', '');
}
}
else
{
$data['heading_title'] = "Login";
$this->load->view('users_login',$data);
}
}
else
{
$data['heading_title'] = "Login";
$this->load->view('users_login',$data);
}
}
$(window).load(function (e) {
$("#back-top").hide();
$(function () {
$(window).scroll(function () {
if ($(this).scrollTop() > 100) {
$('#back-top').fadeIn();
} else {
$('#back-top').fadeOut();
}
})
});
$(".login").fancybox({
'width': 367,
'height': 600,
'autoScale': false,
'type': 'iframe'
});
$(".fotget").fancybox({
'width': 425,
'height': 286,
'autoScale': false,
'type': 'iframe'
});
$(".profile").fancybox({
'width': 700,
'height': 505,
'autoScale': false,
'type': 'iframe'
});
$(".details").fancybox({
'width': 400,
'height': 200,
'autoScale': false,
'type': 'iframe'
});
$(".enquiry").fancybox({
'width': 359,
'height': 450,
'autoScale': false,
'type': 'iframe'
});
$(".contact").fancybox({
'width': 317,
'height': 353,
'autoScale': false,
'type': 'iframe'
});
$(".map").fancybox({
'width': 425,
'height': 355,
'autoScale': false,
'type': 'iframe'
});
});
Ответ №1:
причина, по которой это происходит, заключается в том, что ваш всплывающий контент имеет рамку iframe… вы можете отправить сообщение обратно в родительское окно, чтобы выполнить перенаправление в главном окне браузера, сообщение Google в iframe с его родительским окном должно предоставить вам информацию, необходимую для этого, однако все это зависит от того, имеете ли вы контроль над страницей, которая создается в iframe!
ПРИМЕР: … где бы ни находились ваши перенаправления … замените на…
echo "<script type="text/javascript">window.top.postMessage('logged_in', '*');</script>";
exit; //make sure this is here, to stop php execution!!
Затем в вашем родительском окне (которое инициализирует fancyboxes …)
window.onmesage = function(e){
if(e.data == 'logged_in'){
window.location.href = 'http://pathtopage';
}
}
ПРИМЕЧАНИЕ: ‘logged_in’ также может быть строкой json
'{ "action":"something","redirect":"http://url" }'
просто используйте
JSON.parse(e.data);
в прослушивателе для извлечения объекта json
РЕДАКТИРОВАТЬ: ну и дерьмо… Я неправильно понял ваш вопрос… Я не вижу элемент, который вы используете для отправки формы … но обычно вы должны выполнить e.preventDefault(); для этого элемента, прежде чем разрешить его перенаправление anywhere….so например, вы используете тег привязки…
$('a.form-submit').on('click',function(e){
e.preventDefault();
var redir = $(this).attr('href');
var formData = $('#theform').serialize();
$.post('http://formhandler/route',formdata,function(){
//open a new window...
window.open(redir);
//or send data back to parent window...
window.top.postMessage(redir,'*');
});
});