$(document).ready(function() { $("#register, #login").click(function(e) { var name = ($(event.target).attr('id') == 'register') ? 'Registration' : 'Login'; return e.preventDefault(); }); });
文档准备好后,您需要为 Register 和 Login 按钮分配 click 处理函数。click 处理函数接收一个参数,命名为 e(作为事件) 。此事件对象稍后用来预防默认表单提交。正如之前代码所述。当 click 处理函数被调用时,当前被点击的对象的 ID 被访问,用来确定这是一个用户登录还是一个新用户注册。
现在,您已经知道了使用 jQuery 如何提交表单,我们来看看使用 jQuery 中的 Ajax 和 PHP 如何认证一个用户。
使用 jQuery 中的 Ajax 功能注册和认证一个用户
要认证和注册一个用户,您需要一个服务器端语言和一个数据库。在本文中,服务器端语言是 PHP,数据库是 MySQL,您不需要使用任何特定的服务器端语言或者数据库来创建此函数。
首先开始在 JavaScript 文件中编写附加代码,使用 Ajax 将表单发送给 PHP 。清单 5 的代码开始也类似于清单 4 ,因为它包含按钮的 ready 处理函数和 click 处理函数,而且它确定点击哪个按钮。然后,如果消息元素是打开的,您需要使用 slideUp 函数关闭它的。咋一看 Ajax 调用不是很明显,特别是如果您过去通常不 使用 jQuery 创建 Ajax,因为您通常使用简写函数来发送调用,在代码中甚至都没提及 Ajax。
清单 5. 使用 jQuery 中的 Ajax 提交一个 web 表单
$(document).ready(function() { $("#register, #login").click(function(e) { var name = ($(event.target).attr('id') == 'register') ? 'Registration' : 'Login'; $('#message').slideUp('fast'); $.post('service.php', $('#mainform').serialize() +'&action='+ $(event.target).attr('id'), function(data) { var code = $(data)[0].nodeName.toLowerCase(); $('#message').removeClass('error'); $('#message').removeClass('success'); $('#message').addClass(code); if(code == 'success') { $('#message').html(name + ' was successful.'); } else if(code == 'error') { $('#message').html('An error occurred, please try again.'); } $('#message').slideDown('fast'); }); return e.preventDefault(); }); });
post 函数是一个简写函数,等价于清单 6 中的代码。它将文件路径指向被请求的文件、序列化数据、最后是一个回调函数。用 jQuery 序列化表单数据比较容易:您只需要访问 form 元素和调用 serialize 功能获取一个标准查询字符串。回调函数首先通过访问响应的第一个节点来确定调用是成功还是失败:PHP 文件以一个名为 success or error 的节点返回结果。状态确定之后,您就可以从之前的表单提交中删除 message 元素中留下的任何类。然后添加一个响应成功对应的类。message 元素被附加到声明成功或错误消息的 HTML 后,然后使用 jQuery 的 slideDown 函数打开 message。
清单 6. jQuery Ajax 函数
$.ajax({ type: 'POST', url: url, data: data, success: success dataType: dataType });
在创建同数据库交互的 PHP 文件之前,您需要构建您计划保存新用户和选择现有用户表单的数据库。清单 7 包含了您需要的 SQL 代码,来创建名为 ibm_user_auth 的 MySQL 表,其中包括一个 ID,用户名、密码、名字、姓、以及 Email 地址。ID 被设置为自动增量并作为主键。其他值都是 tinytext 型的,除了密码,密码是 varchar(32) 的,因为稍后您将使用它来保存一个消息摘要算法 5(MD5)加密的值。
清单 7. 为用户创建 MySQL 数据库表的 SQL 代码
CREATE TABLE `ibm_user_auth` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` tinytext NOT NULL, `password` varchar(32) NOT NULL, `firstname` tinytext NOT NULL, `lastname` tinytext NOT NULL, `email` tinytext NOT NULL, PRIMARY KEY (`id`) );
表构建完成之后,您就可以开始编写与数据库交互的 PHP 代码了。您将在您的 Ajax post 函数中调用该文件 — 名为 service.php。清单 8 显示了构成该文件的代码。首先定义数据库连接变量。数据库信息建立之后,确保用户名和密码被通过表单张贴传递;如果是这样,提取张贴数据然后连接到数据库。现在您已经连接到数据库了,需要确定是否使用发送数据来登录一个已有用户或注册他/她作为一个新用户。您只需要检查 action 变量是从张贴数据提取的和被 Ajax 表单张贴发送的,就可以确定了。