图 16-3
2. PHPPHP是一种比较流行的开放源代码的服务器端脚本语言。如果想运行PHP脚本,必须在计算机上安装PHP。从www.php.net上可以下载到各种形式的PHP安装程序(如二进制形式、Windows安装向导形式、或者PHP的源代码形式)。本例中的PHP代码是用PHP 4编写的,但在PHP 5中这些代码也能照常运行。
打开文本编辑器并输入下列代码:
html
head
titleForm Field Validation/title
style type="text/css"
.fieldname
{
text-align: right;
}
.submit
{
text-align: right;
}
/style
script type="text/javascript" src="HttpRequest.js"/script
script type="text/javascript"
function checkUsername()
{
var userValue = document.getElementById("username").value;
if (userValue == "")
{
alert("Please enter a user name to check!");
return;
}
var url = "formvalidator.php?username=" + userValue;
var request = new HttpRequest(url, checkUsername_callBack);
request.send();
}
function checkUsername_callBack(sResponseText)
{
var userValue = document.getElementById("username").value;
if (sResponseText == "available")
{
alert("The username " + userValue + " is available!");
}
else
{
alert("We’re sorry, but " + userValue + " is not available.");
}
}
function checkEmail()
{
var emailValue = document.getElementById("email").value;
if (emailValue == "")
{
alert("Please enter an email address to check!");
return;
}
var url = "formvalidator.php?email=" + emailValue;
var request = new HttpRequest(url, checkEmail_callBack);
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)request.send();
}
function checkEmail_callBack(sResponseText)
{
var emailValue = document.getElementById("email").value;
if (sResponseText == "available")
{
alert("The email " + emailValue + " is currently not in use!");
}
else
{
alert("I’m sorry, but " + emailValue + " is in use by another user.");
}
}
/script
/head
body
form
table
tr
td class="fieldname"
Username:
/td
td
input type="text" id="username" /
/td
td
a href="javascript: checkUsername()"Check Availability/a
/td
/tr
tr
td class="fieldname"
Email:
/td
td
input type="text" id="email" /
/td
td
a href="javascript: checkEmail()"Check Availability/a
/td
/tr
tr
td class="fieldname"
Password:
/td
td
input type="text" id="password" /
/td
td /
/tr
tr
td class="fieldname"
Verify Password:
/td
td
input type="text" id="password2" /
/td
td /
/tr
tr
td colspan="2" class="submit"
input type="submit" value="Submit" /
/td
td /
/tr
/table
/form
/body
/html
将上面的代码保存在Web服务器的根目录中。如果你使用的Web服务器是IIS,则将上面的代码保存为c:inetpubwwwrootvalidate_form.htm文件。如果你使用的Web服务器是Apache,则可将上面的代码保存在htdocs文件夹之下,即保存为pathTohtdocshtdocsvalidate_form.htm文件。
另外,我们还需要将httprequest.js文件(定义了HttpRequest类)和formvalidator.php文件放在与validate_form.htm文件相同的目录中。
现在,我们可以打开浏览器,在地址栏中输入http://localhost/formvalidator.php。如果Web服务器工作正常的话,你将看到页面上显示出PHP is working correctly. Congratulations!这样一段文本信息,如图16-4所示。
图 16-4
接下来,如果在浏览器的地址栏中输入http://localhost/validate_form.htm,你将看到一个如图16-5所示的页面。
图 16-5
在Username文本框中输入jmcpeak,并单击文本框旁边的Check Availability超链接,你将看到一个弹出的信息对话框,如图16-6所示。
图 16-6
接下来,在Email文本框中输入someone@xyz.com,并单击文本框旁边的Check Availability超链接。你将看到一个消息对话框弹出,并提示你该E-mail已经被注册了。我们还可以在Username文本框和Email文本框中输入我们自己的用户名和E-mail地址,并单击文本框旁边相应的超链接进行检查。也许信息对话框将告诉你所输入的用户名或E-mail是有效的(注意:在服务器端的PHP程序中,假定了用户名jmcpeak和pwilton,电子邮箱someone@xyz.com和someone@zyx.com已经被注册)。
代码解说
该HTML页面中包含一个简单的表单,表单中的各个字段通过一个表格来进行页面布局的处理。在表格中,每一个表单字段占用一个表格行。表格的前两行就是我们最感兴趣的字段,即Username字段和Email字段。相应的HTML代码如下所示:
form
table
tr
td class="fieldname"
Username:
/td
td
input type="text" id="username" /
/td
td
a href="javascript: checkUsername()"Check Availability/a
/td
/tr
tr
td class="fieldname"
Email:
/td
td
input type="text" id="email" /
/td
td
a href="javascript: checkEmail()"Check Availability/a
/td
/tr
!-- HTML to be continued later --
表格的第一列包含了字段的标题。第二列则包含了input/元素本身。这些标记都有id属性,username用于Username域,email用于Email域。这使用户可以很容易地找到input/元素并将文本输入其中。第三列中则包含了一个相应的超链接(a/元素),该超链接使用JavaScript:协议来调用JavaScript代码。在本例中,当用户单击Username字段之后的超链接时,将调用checkUsername()函数,当用户单击了Email字段之后的超链接时,将调用checkEmail()函数。稍后我们将讨论这两个函数。
表格的其余三行包含了两个密码字段和一个Submit按钮(在本例的表单中并不涉及这几个字段)。其前两行同样也包含了三列:第一列是描述性的字段标题,第二列则包含了input/元素,第三列为空。定义这三个表格行的HTML代码如下所示:
!-- HTML continued from earlier --
tr
td class="fieldname"
Password:
/td
td
input type="text" id="password" /
/td
td /
/tr
tr
td class="fieldname"
Verify Password:
/td
td
input type="text" id="password2" /
/td
td /
/tr
tr
td colspan="2" class="submit"
input type="submit" value="Submit" /
/td
td /
/tr
/table
/form
最后一行则包含了两个单元格。第一个单元格跨越了表格的两列,其中包含了表单的Submit按钮。第二个单元格则为空。
该HTML页面中的CSS仅包含了如下所示的两个样式规则:
.fieldname
{
text-align: right;
}
.submit
{
text-align: right;
}
这两个样式规则用于设置表格中元素的对齐方式,以使表单看上去整齐而有序。
在这个实例中,字段之后的超链接是实现Ajax功能的关键,当单击超链接时将调用相应的JavaScript函数。首先,我们来讨论一下第一个函数checkUsername(),该函数用以获取用户在Username文本框中输入的用户名,并使用该信息执行一个HTTP请求。
function checkUsername()
{
var userValue = document.getElementById("username").value;
if (userValue == "")
{
alert("Please enter a user name to check!");
return;
}
var url = "formvalidator.php?username=" + userValue;
var request = new HttpRequest(url, checkUsername_callBack);
request.send();
}
在上面的代码中,为了获取用户名,使用了document.getElementById()方法以引用该input/元素,使用value属性以获取用户在username文本框中输入的用户名,并将用户名保存在变量userValue中。接下来,将变量userValue的值与空字符串(" ")进行比较。如果username文本框中的值为空,则提示用户输入用户名,并使用return语句返回以结束函数的执行。如果不对用户名为空的情况进行检查,则可能会向服务器发送一些不必要的请求。
在checkUsername()中,接下来的代码构造了一个URL字符串并将其保存在变量url中,该URL是一个向目标服务器PHP程序发送请求的查询字符串。随后,创建了一个HttpRequest对象,将URL和回调函数传递给HttpRequest()构造函数,并向目标服务器发送请求。
当HttpRequest对象成功地从服务器获得响应之后,回调函数checkUsername_callBack()将被执行。该函数将根据请求返回的信息告诉用户所申请的用户名是否有效。注意,从服务器返回的值只包含两个可能的值:available和not available,因此,我们仅须检查这两个可能的值之一。相应代码如下所示:
function checkUsername_callBack(sResponseText)
{
var userValue = document.getElementById("username").value;
if (sResponseText == "available")
{
alert("The username " + userValue + " is available!");
}
else
{
alert("We’re sorry, but " + userValue + " is not available.");
}
}
如果服务器返回的响应是available,则该函数将告诉用户当前申请的用户名有效。否则如果返回的响应是not available,则该函数将告诉用户当前申请的用户名已经被占用。
检查电子邮件是否有效也可以采用类似的方法。checkEmail()函数用于获取用户在Email字段中输入的数据,并将该信息发送给服务器端的PHP程序。
function checkEmail()
{
var emailValue = document.getElementById("email").value;
if (emailValue == "")
{
alert("Please enter an email address to check!");
return;
}
var url = "formvalidator.php?email=" + emailValue;
var request = new HttpRequest(url, checkEmail_callBack);
request.send();
}
回调函数checkEmail_callBack()与checkUsername_callBack()函数的功能类似。在checkEmail_callBack()函数中采用了相同的程序逻辑,该函数将根据请求返回的信息告诉用户所输入的e-mail是否有效。
function checkEmail_callBack(sResponseText)
{
var emailValue = document.getElementById("email").value;
if (sResponseText == "available")
{
alert("The email " + emailValue + " is currently not in use!");
}
else
{
alert("I’m sorry, but " + emailValue + " is in use by another user.");
}
}
同样,在checkEmail_callBack()函数中,检查从服务器返回的响应是否是available,如果是,则通知用户他输入的e-mail可以使用。如果从服务器返回的响应是not available,则通知用户他输入的e-mail已经被其他用户注册。
使用XMLHttpRequest对象并不是唯一的解决办法,下面我们将介绍使用iframe方式来实现该表单的功能。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)