注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 GHOST系统封装 全图 教程
 帮助

Ajax ! XmlHttpRequest


2007-04-03 02:11:27
 标签:XML Ajax   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blackanger.blog.51cto.com/140924/22388
.创建XmlHttpRequest对象.
在使用XmlHttpRequest对象发送请求和处理响应之前,必须先用JavaScript创建一个XmlHttpRequest对象,由于XmlHttpRequest不是一个W3C的标准,所以可以采用多种方式创建XmlHttpRequest对象.IEXmlHttpRequest实现为一个ActiveX对象,其他浏览器如Firefox把它实现为一个javascript对象.由于存在这些差别,JavaScript代码必须包含有关逻辑,从而使用ActiveX技术或者使用本地JavaScript来创建XmlHttpRequest实例.
 
创建一个XmlHttpRequest对象的例子:
var xmlHttp;
function createXMLHttpRequest(){
     if(window.ActiveXObject){
       xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
else if(window.XMLHttpRequest){
       xmlHttp = new XMLHttpRequest();
}
}
在创建XmlHttpRequest对象的时候,我们不需要判断浏览器属于哪种类型,只要判断浏览器是否提供对ActiveX对象的支持就行了,如果支持,则使用ActiveX来创建XmlHttpRequest对象,否则就用本地javascript来创建XmlHttpRequest对象.
 
. XmlHttpRequest对象的方法和属性.
方法:
1.void open(String method,String url,Boolean asynch,String username,String password)这个方法会建立对服务器的调用.这是初始化请求的纯脚本方法.它有两个必须的参数(提供调用的特定方法get,post,put,还要提供调用资源的URL),还有3个可选参数(传递一个boolean,指示这个调用是异步还是同步,默认为true,表示异步,我们学的就是异步,所以用默认就行,但某种情况下设置为false是可用的,比如验证用户信息,后两个参数允许你指定一个特定的用户名和密码).
2.void send(content).这个方法具体向服务器发出请求.如果请求声明为异步,这个方法立即返回.否则就会等到收到响应为止.可选参数可以是DOM对象,输入流,或是字符串.传入这个方法的内容会作为请求体的一部分发送.
3.void setRequestHeader(String header,String value)设置请求头.必须放在open()方法后.
4.void abort();停止请求.
5.String getAllResponseHeaders() 得到所有响应头.
6. String getAllResponseHeader(String header) 得到指定的响应头
属性:
Onreadystatechange  à 每个状态改变时都会触发这个事件处理器.通常会调用一个javascript函数.
readyState          à  请求的状态,5个可能取值:0=未初始化,1=正加载,2=已加载,3=交互中,4=完成.
responseText        à  服务器的响应,表示为一个串
responseXml        à  服务器的响应,表示为一个XML,这个对象可以解析为一个DOM对象
status              à 服务器的HTTP状态码.(200,404)
statusText          à  HTTP状态码的相应文本.(OK,NOT FOUND)
 
.交互示例.
1.一个客户端事件触发一个Ajax事件.如有如下代码:
<input type=”text” d=”email” name=”email” onblur=”validateEmail()”;>
2.创建一个XmlHttpRequest的实例,使用open()方法建立调用,并设置URL以及希望的HTTP方法(get,post),请求实际上是通过send方法调用触发.可能的代码如下:
var xmlHttp;
function validateEmail(){
         var email=document.getElementById(“email”);
         var url = “validate?email=”+escape(email.value);
            if(window.ActiveXObject){
           xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
else if(window.XMLHttpRequest){
           xmlHttp = new XMLHttpRequest();
}
xmlHttp.open(“GET”,url);
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}
3.向服务器做出请求.可能调用servlet等任何服务器端技术.
4.服务器可以做你想做的事,包括访问数据库,或者是一个系统
5.请求返回到浏览器.Content-Type设置为text/html----XmlHttpRequest对象只能处理text/html类型的结果.你可以设置头字段,确保浏览器不在本地缓存结果.
response.setHeader(“Cache-Control”,”no-cache”);
 response.setHeader(“Pragma”,”no-cache”);
6.这个示例中, XmlHttpRequest对象配置为处理返回时要调用callback()函数.这个函数会检查XmlHttpRequest对象的readyState属性.然后查看服务器返回的状态码.如果正常,则回调函数callback()会在客户机上做点有意思的事.例如:
     function callback(){
       if(xmlHttp.readyState == 4){
       if(xmlHttp.status == 200){
              //do something…
}
}
}
 
.GETPOST
当从服务器获取数据时用GET,而改变服务器数据的时候用POST.
 
.远程脚本(remote scripting)
远程脚本是一种远程过程调用类型.避免刷新页面.实现远程脚本的方法通常是将脚本和一个IFrame结合,以及有服务器返回JavaScript,然后在浏览器中运行这个javascript.可以用远程脚本来实现类似Ajax的无刷新功能(XmlHttpRequest问世之前).
 
.如何发送简单请求
前面已有简单步骤,下面是一个示例:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
<html xmlns=”http://www.w3.org/1999/xhtml”>
     <head>
            <title>Simple XmlHttpRequest</title>
            <script type=”text/javascript”>
var xmlHttp;
 
function createXMLHttpRequest(){
                   if(window.ActiveXObject){
                  xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
else if(window.XMLHttpRequest){
                   xmlHttp = new XMLHttpRequest();
}
}
 
function startRequest(){
    createXMLHttpRequest();
    xmlHttp.onreadystatechange=handleStateChange;
    xmlHttp.open(“GET”,”SimpleRequest.xml”,true);
    xmlHttp.send(null);
}
             
                 function handleStateChange(){
                     if(xmlHttp.readyState == 4){
                     if(xmlHttp.status == 200){
                            alert(“The server replied with:”+ xmlHttp.responseText);
}
}
}
</script>
</head>
<body>
       <form>
<input type=”button” value=”Start Basic Asynchronous Request” />
</form>
</body>
</html>
注意引号否则会出错.

本文出自 “{ :Alex Space => " Ruby Notes " }” 博客,请务必保留此出处http://blackanger.blog.51cto.com/140924/22388



上一篇 JavaScript ! Knowledge spot  下一篇 About CSS



    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: