Ajax ! XmlHttpRequest

. 创建 XmlHttpRequest 对象 .
在使用 XmlHttpRequest 对象发送请求和处理响应之前 , 必须先用 JavaScript 创建一个 XmlHttpRequest 对象 , 由于 XmlHttpRequest 不是一个 W 3C 的标准 , 所以可以采用多种方式创建 XmlHttpRequest 对象 .IE XmlHttpRequest 实现为一个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…
}
}
}
 
.GET POST
当从服务器获取数据时用 GET, 而改变服务器数据的时候用 POST.
 
. 远程脚本 (remote scripting)
远程脚本是一种远程过程调用类型 . 避免刷新页面 . 实现远程脚本的方法通常是将脚本和一个 IFrame 结合 , 以及有服务器返回 JavaScript, 然后在浏览器中运行这个 javascript. 可以用远程脚本来实现类似 Ajax 的无刷新功能 ( XmlHttpRequest 问世之前 ).
 
. 如何发送简单请求
前面已有简单步骤 , 下面是一个示例 :
<!DOCTYPE html PUBLIC “-//W 3C //DTD XHTML 1.0 Strict//EN”
“[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd[/url]”>
<html xmlns=”[url]http://www.w3.org/1999/xhtml[/url]”>
     <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>
注意引号 否则会出错 .

你可能感兴趣的:(xml,Ajax,职场,休闲)