jQuery和AJAX登录表单

我正忙着开发一个网站,我在右上角有一个登录框。 我希望用户能够在同一页面上登录,而无需刷新。

好的,我得到了那部分工作,但我仍然在努力处理登录后的过程,我看起来如下:

(HTML)

 

(PHP)

 session_start(); $username = $_POST['username']; $password = $_POST['password']; if ($username == "admin" && $password == "XXX") { $_SESSION['logged_in'] = true; $_SESSION['user'] = $username; echo include("isLoggedIn.php"); } else { echo include("isNotLoggedIn.php"); } 

(我的jQuery)

 $("form#login").submit( function() { var usernameVal = $("input[name='username']").val(); var passwordVal = $("input[name='password']").val(); $.post("login.php",{username : usernameVal, password : passwordVal}, // callback function to receive feedback function(data) { $("li.login").html(data); }); return false; }); $("a[name='logout']").click( function() { $.post("logout.php", function(data) { $("li.login").html(data); }); }); 

(isLoggedIn.php)

 Welcome, !
Add game
Add player

Log out

(isNotLoggedIn.php)

 


登录过程有效,但注销是乱码。 当我点击isLoggedIn.php中的Logout链接时,它会注销,但我在文本输入上的jQuery不再起作用,以及表单本身的jQuery。

有没有办法我必须刷新我的jQuery重新激活被替换的HTML? 任何帮助赞赏。

问候和TIA

只是要详细说明redsquare的答案,你需要将你的jQuery更改为…:

 $(function() { /** ...What ever else you might have onload... **/ $("a[name='logout']").live('click',function() { // Now using the .live() event $.post("logout.php", function(data) { $("li.login").html(data); bind_login_submit(); // <---- Notice, this is new }); }); bind_login_submit(); // Call this function to initially bind the submit }); function bind_login_submit() { $("form#login").unbind('submit').bind('submit',function() { var usernameVal = $("input[name='username']").val(); var passwordVal = $("input[name='password']").val(); $.post("login.php",{username : usernameVal, password : passwordVal}, function(data) { $("li.login").html(data); }); return false; }); } 

那么你正在替换html,这样你就会丢失之前绑定到被删除元素的事件。 替换html内容后,可以使用回调重新绑定事件。 您还可以查看.live jQuery方法,但这不适用于submit事件,因此您在更改表单后必须始终重新绑定。

我并不真正使用jQuery,但我的猜测是post和click事件不再存在,因为它已经通过ajax更新了。

你必须再次添加这些事件。

你可以创建一个attach()函数来选择你想要的东西并附加事件并在你的请求回调时运行它。