2010-09-03 52 views
0

希望你能帮上忙。这里有一些jQuery/AJAX newb。SimpleModal PHP登录表单:如何重定向成功/失败

我有一个基本的SimpleModal登录表单,可以从我的网站的主页中调用。

login.js调用login.php脚本来检查我的数据库中的用户凭证。

如果登录成功,我设置了几个会话变量,我通常使用header命令将用户发送到他们的个人页面(或登录失败时的错误页面)。

例如。标题( “位置:限制/ index.php的”);

我无法获取模态登录表单关闭,父主页重定向到成员页面。我通常留下空白模式方说“谢谢你”

,如果我尝试用

success: function (data) { 
$('#login-container .login-loading').fadeOut(200, function() { 
    $('#login-container .login-title').html('Thank you!'); 
    msg.html(data).fadeIn(200); 
    $.modal.close(); //have inserted this line 
}); 
}, 

模态关闭关闭模式窗体,但我留在主页上。 (用户在此阶段登录,但重定向尚未发生)。

我一直踢这一天或2我看看wordpress登录插件,但我没有更聪明。有任何想法吗?

回答

2

其实重定向大概确实发生了,它刚刚发生了里面的这个AJAX请求。当你进行重定向时,ajax函数使用的XmlHttpRequest将会透明地跟随它,所以返回给客户端的页面是restricted/index.php。我倾向于做的就是添加上页,像这样的标题:

header("Redirect:restricted/index.php"); 

然后找头,像这样使用$.ajaxSetup()

$.ajaxSetup({ 
    complete: function (xhr) { 
    var redirect = xhr.getResponseHeader('Redirect'); 
    if(redirect) window.location.href = redirect; 
    } 
}); 

这种方式(除非你覆盖complete,它使这个选项打开),当一个请求返回到restricted/index.php(记得XmlHttpRequest实际去那里)时,它会得到一个头让客户知道它需要重定向。

+0

感谢您的回复。是的,重定向确实发生在幕后。 AJAX新手 - 很难看到发生了什么。所以我现在有>标题(“重定向:restricted/index.php”);在目标页面restricted/index.php,我现在有重定向HTTP标头。究竟应该在哪里放置ajaxSetup函数,以及如何调用它。对不起,这样一个愚蠢的问题。我在页面代码中使用> if(redirect)alert(redirect);在脚本标签内调试行但它没有运行。谢谢! – chakotha 2010-09-07 11:09:02

+0

@ user438858 - 如何*不*重定向,而是发送一个不同的头部给客户端,以便他们*可以重定向,就像我上面所说的那样...如果登录成功,您只需添加该头部? – 2010-09-07 11:14:24

+0

@ user438858 - 在发出任何Ajax请求之前,可以在任何地方调用它,只需要一次就可以调用。如果ajax请求有自己的'complete',你需要改变一下方法,是这样吗? – 2010-09-07 11:15:30