34.2.2 与服务器通信
在前面内容介绍的例子中,它的主要功能是创建一个新的XMLHTTPRequest对象;还没有执行任何使用该对象进行真正通信的操作。在接下来的例子中,将创建一个能够向服务器发送请求的JavaScript函数,具体地说是向servertime.php脚本发送请求。
function getServerTime(){
var thePage='servertime.php';
myRand=parseInt(Math.random()*999999999999999);
var theURL=thePage+"?rand="+myRand;
myReq.open("GET",theURL,true);
myReq.onreadystatechange=theHTTPResponse;
myReq.send(null);
}
函数的第一行创建一个名为thePage的变量,变量值为servertime.php。这是位于服务器端的脚本文件名称。
第二行代码作用不重要,因为它只是创建一个随机数。可能会有问题“一个随机数与服务器时间有什么关系?”答案是它对脚本本身并没有任何直接的影响。创建随机数并将其附加在URL中(如第三行代码所示)的原因是避免浏览器(或者代理服务器)缓存该请求带来的任何问题。如果URL只是http://yourserver/yourscript.php,服务器返回的结果可能会被缓存。然而,如果URL是http://yourserver/yourscript.php?rand=randval,浏览器或代理服务器就没法缓存,因为每次的URL都是不同的,而函数的实际功能是没有变化的。
该函数的最后三行代码使用了XMLHTTPRequest对象实例的三个方法(open,onreadystatechange和send),该XMLHTTPRequest对象是通过前面示例的getXMLHTTPRequest()方法获得。
在调用open()方法的代码行中,该方法的参数是请求类型("GET"),URL("theURL"),以及"true"表示该请求为异步的。
在调用onreadystatechange()方法的代码行中,当对象状态发生变化时,该函数调用一个新的函数——theHTTPResponse()。
在调用send()方法的代码行中,该函数向服务器端脚本发送了空的内容(NULL)。
到这里,创建一个名为servertime.php的文件,并且输入如程序清单34-1所示代码:
程序清单34-1 servertime.php代码
<?php
header('Content-Type:text/xml');
echo"<?xml version=\"1.0\"?>
<clock>
<timestring>It is".date('H:i:s')."on".date('M d,Y').".</timestring>
</clock>";
?>
该脚本将通过PHP的date()函数的调用获得服务器的当前时间,并且以XML编码的字符串返回。需要注意的是,date()函数被调用了两次;一次是date('H:i:s'),它将以24小时格式返回服务器当前时间的小时,分钟和秒。而以date('M d,Y')格式调用将返回脚本被调用时的月份、日期和年份。
返回结果的XML字符串如下示例所示,其中方括号中的字符将被真实值所代替:
<?xml version="1.0"?>
<clock>
<timestring>
It is[time]on[date].
</timestring>
</clock>
接下来的内容将介绍如何创建剩下的函数——theHTTPResponse(),并且通过服务器上的脚本对响应进行一些处理。