图 16-7
代码解说
在上面的HTML代码中,除了在表单的结束标记form/之后添加了一个iframe/元素之外,其他的HTML元素都保持不变。所添加的iframe/元素如下所示:
iframe src="about:blank" id="hiddenFrame" name="hiddenFrame" /
该嵌入框架被初始化为一个空白的HTML页面,其name属性和id属性都被设置为hiddenFrame。在后面的代码中,我们将通过name属性,从BOM对象的frames集合中引用这个嵌入框架。接下来,设置该嵌入框架的CSS样式。
#hiddenFrame
{
display: none;
}
该元素规则仅包含了一个样式声明,该样式声明将iframe/元素隐藏起来。
注意:
通过CSS的方式来隐藏iframe/元素,可以在需要调试服务器端程序时将iframe/元素很方便地显示出来。
下面是页面中的JavaScript代码。
function checkUsername()
{
var userValue = document.getElementById("username").value;
if (userValue == "")
{
alert("Please enter a user name to check!");
return;
}
var url = "iframe_formvalidator.php?username=" + userValue;
frames["hiddenFrame"].location = url;
}
对于checkUsername()函数,仅仅做了一点小小的修改:该函数将使用iframe而不是使用XMLHttpRequest对象来向目标服务器发起请求。在该函数中,首先获取了Username文本框的值。并对用户是否在文本框中输入了数据进行检查。如果文本框为空,则弹出一个对话框以告诉用户需要在Username文本框中输入用户名。如果Username文本框不为空,则构造一个向目标服务器发送请求的查询字符串,并将该请求字符串的URL保存在变量url中。最后一步使用frames集合来引用该iframe,并将其location属性设置为url,以在iframe中加载由url指定的服务器端页面。
页面中的第二个函数是checkUsername_callBack()函数,在本例中对该函数也做了少量的修改。现在,该函数将接收两个参数:第一个参数data的值将是available或者not available;第二个参数userValue的值就是在发起请求的查询字符串中发送给服务器的用户名。checkUsername_callBack()函数的代码如下所示:
function checkUsername_callBack(data, userValue)
{
if (data == "available")
{
alert("The username " + userValue + " is available!");
}
else
{
alert("We’re sorry, but " + userValue + " is not available.");
}
}
在checkUsername_callBack()函数中,首先检查了从服务器返回的数据,即检查data的值是否为available。如果是,则表示所申请的用户名有效,并弹出一个对话框告诉用户所申请的用户名可用。否则,将弹出一个对话框,告诉用户所申请的用户名无效。
用于检查e-mail地址的两个函数与之非常类似。下面就是用于检查e-mail地址是否有效的两个函数:checkEmail()函数和checkEmail_callBack()函数。
function checkEmail()
{
var emailValue = document.getElementById("email").value;
if (emailValue == "")
{
alert("Please enter an email address to check!");
return;
}
var url = "iframe_formvalidator.php?email=" + emailValue;
frames["hiddenFrame"].location = url;
}
function checkEmail_callBack(data, emailValue)
{
if (data == "available")
{
alert("The email " + emailValue + " is currently not in use!");
}
else
{
alert("We’re sorry, but " + emailValue + " is in use by another user.");
}
}
checkEmail()函数的处理过程与checkUsername()函数类似。该函数首先获取了Email文本框中的值,并检查是否为空。如果不为空,则使用该值构造一个发送请求的查询字符串,并在iframe中加载该URL指定的服务器页面。
对checkEmail_callBack()函数所做修改与对checkUsername_callBack()函数所做的修改类似。同样,该函数将接收两个参数,根据从服务器返回的信息检查用户输入的e-mail是否有效,并将相应的信息显示给用户。
上面这两个例子都是比较简单的,这两个例子主要用于演示Ajax技术是如何工作的。我们还可以使用其他的技术方案来实现智能表单(在一些技术方案中并不需要单击超链接),其中一些技术方案易于实现,就像本章中的方案一样。但一些技术方案则可能比较复杂。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)实际上,Ajax技术的本质就是:通过某种方式实现客户端/服务器的通信,而无须刷新整个页面。实现Ajax技术的关键就是客户端和服务器的程序。在上面的两个例子中,我们可以看到,接收请求的服务器端程序需要处理请求的数据,并将处理结果返回给客户端。显然,我们需要采用某种服务器端的技术来执行所请求的功能,这样才能把Ajax技术的优势发挥到极致。我们可以采用任何一种服务器端的编程技术,如PHP、ASP或 .NET、ColdFusion、PERL 本质上我们可以采用任何一种能够以文本格式返回数据的服务器端编程技术。