ajax 学习笔记

Ajax=异步javascript 和 xml

Ajax 是一种用于创建快速动态页面的技术

XmlHttpRequest是ajax的基础

所有现代浏览器均支持xmlhttprequest对象 (IE5和IE6使用ActiveXObject).

xmlhttprequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个页面的情况下,对页面的某部分进行更新。

为了对应所有的浏览器,创建xmlhttprequest:

var xmlhttp;
if(window.XMLHttpRequest)
{
   xmlhttp=new XMLHttpRequest();
}
else
{
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

向服务器发送请求:

如果需要向服务器发送请求,使用XMLHttpRequest对象的open()和send()方法

xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
方法                                          描述
open(method,url,async)              规定请求的类型、URL 以及是否异步处理请求。
                                 method:请求的类型;GET 或 POST
                                                 url:文件在服务器上的位置
                                 asynctrue(异步)或 false(同步)

send(string)                                       将请求发送到服务器。
                                 string:仅用于 POST 请求

Get  还是 Post?

与post 相比 简单也更快,并且在大多数情况下也都能用。

然而,在以下情况下,请使用post:

1.无法使用缓存文件(更新服务器上的文件和数据库)

2.向服务器发送大量数据(post没有数据限制)

3.发送包含未知字符的用户输入时,post比get更稳定也更可靠

get 请求
xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
xmlhttp.send();

POST 请求
一个简单 POST 请求
xmlhttp.open("POST","demo_post.asp",true);
xmlhttp.send();

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");

javascript 会等到服务器响应就绪才继续执行。如果服务器繁忙或者缓慢,应用程序会挂起或停止

通过ajax,javascript无需等待服务器的响应,而是:

1.在等待服务器响应时执行其他脚本

2.在响应就绪后对响应进行处理

 

Async=true

当使用async=true时,请规定响应处于onreadystatechange事件中的就绪状态时执行的函数

xmlhttp.onreadystatechange=function(){

if(xmlhttp.readyState==4&&xmlhttp.status==200){

  document.getElementId("mydiv").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","text1.txt",true);

xmlhttp.send();

Async=false

如果async=false不需要使用onreadystatechange函数 把代码放到send()语句后面即可

xmlhttp.open("GET","text.txt",false);
xmlhttp.send();
document.getElmentId("mydiv" ).innerHTML=xmlhttp.responseText;

如果需要获得服务器的响应,请使用xmlHttpReqpest对象的responseText或responseXML属性
请求boox.xml文件,并解析响应:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementByTagName("Artist");
for(i=0;i<x.length;i++)
{
   txt=txt+x[i].childNodes[0].nodeValue+"<br>";
}
document.getElementById("mydiv").innerHtml=txt;

  

Ajax  事件

xmlhttprequest对象的三个重要的属性:

onreadystatechange                          存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

readyState                                          存有 XMLHttpRequest 的状态。从 04 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪

status                                                   200: "OK"
404: 未找到页面

当 readyState 等于 4 且状态为 200 时,表示响应已就绪

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

CallBack函数 (回调函数)

是一种以参数形式传递给另一个函数的函数

如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):

function myFunction()
{
loadXMLDoc("ajax_info.txt",function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}

 

 

 

posted on 2013-06-06 12:05  douqiumiao  阅读(176)  评论(0编辑  收藏  举报