AJAX学习笔记
2016-07-18 23:06
260 查看
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 是在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的艺术。
1.XMLHttpRequest 是 AJAX 的基础。
XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。AJAX,JavaScript 无需等待服务器的响应而是:在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理;
//创建 XMLHttpRequest 对象的语法: var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari //所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。 xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 //老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象: xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
2.向服务器发送请求
xmlhttp.open("GET","test1.txt",true);//open(method,url,async) xmlhttp.send();//send(string) 将请求发送到服务器。 //string:仅用于 POST 请求 /* 规定请求的类型、URL 以及是否异步处理请求。 method:请求的类型;GET 或 POST url:文件在服务器上的位置 async:true(异步)或 false(同步 */ /* GET 还是 POST? 与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况中,请使用 POST 请求 1.无法使用缓存文件(更新服务器上的文件或数据库 2.向服务器发送大量数据(POST 没有数据量限制 3.发送包含未知字符的用户输入时,POST 比 GET更稳定也更可 */
3.POST请求
//如果需要像 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"); //setRequestHeader(header,value) //向请求添加 HTTP 头。 //header: 规定头的名称 //value: 规定头的值
4.异步请求和非异步请求
xmlhttp.open("GET","ajax_test.asp",true); //当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数: xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","test1.txt",true); xmlhttp.send(); //非异步,不推荐使用 async=false,但是对于一些小型的请求,也是可以的。 //JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。 xmlhttp.open("GET","test1.txt",false); xmlhttp.send(); document.getElementById("myDiv").innerHTML=xmlhttp.responseText; //注释:当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:
5.服务器响应
function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) //服务器返回,并进行操作 //1. responseText 获得字符串形式的响应数据。 document.getElementById("myDiv").innerHTML=xmlhttp.responseText; //2. responseXML 获得 XML 形式的响应数据。 xmlDoc=xmlhttp.responseXML; txt=""; x=xmlDoc.getElementsByTagName("title"); for (i=0;i<x.length;i++) { txt=txt + x[i].childNodes[0].nodeValue + "<br />"; } document.getElementById("myDiv").innerHTML=txt; } } } xmlhttp.open("GET","/ajax/test1.txt",true); xmlhttp.send(); }
6.onreadystatechange事件
//每当 readyState 改变时,就会触发 onreadystatechange 事件。 //readyState 属性存有 XMLHttpRequest 的状态信息。 //下面是 XMLHttpRequest 对象的三个重要的属性: //1.onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 //2.readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 /* 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 注释:onreadystatechange 事件被触发 5 次(0 - 4),对应着 readyState 的每个变化。 */ //3.status 200: "OK" ,404: 未找到页面 //当 readyState 等于 4 且状态为 200 时,表示响应已就绪: xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //做你的事情了 } }
7.使用 Callback 函数
var xmlhttp; function loadXMLDoc(url,cfunc) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=cfunc; xmlhttp.open("GET",url,true); xmlhttp.send(); } function myFunction() { loadXMLDoc("/ajax/test1.txt",function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }); } //callback 函数是一种以参数形式传递给另一个函数的函数 如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数 该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同)
8.获取请求头
if (xmlhttp.readyState==4 && xmlhttp.status==200) { xmlhttp.getAllResponseHeaders();//对所以head请求 /* Date: Mon, 18 Jul 2016 14:45:45 GMT ETag: "1c39a9987f8cce1:2c6d" Last-Modified: Mon, 29 Jul 2013 17:18:09 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Content-Type: text/plain Accept-Ranges: bytes Content-Length: 108 */ xmlhttp.getResponseHeader('Last-Modified');//对指定的head请求; //Mon, 29 Jul 2013 17:18:09 GMT }
相关文章推荐
- Codeforces Round #241 (Div. 2)->B. Art Union
- 【题&结论】【图(Floyd)&矩阵】NKOJ 1895 奶牛接力赛
- Benefit(UVA 11889)
- strcpy()函数与strncpy()函数实现
- 以写代学:python continue
- 采样方法
- Hadoop自学系列集(一) ---- 使用VMware安装CentOS
- hdoj 1007 临近点对算法模板
- hdu5413 CRB and Roads(topo + bitset)
- NDK配置之Linux环境
- Java烧脑驴游(三)--对象和类
- Hadoop概念学习系列之常见的分布式文件系统(二十六)
- sqlite应用demo
- unity Android csv 数据持久化
- html中的a标签(超链接)的使用
- 使用Notepad++将多行数据合并成一行
- codeforces-327C Magic Five(等比数列求和+快速幂+逆元)
- Speech 模块加载出错
- JHTP小结_第十章_面向对象编程-多态(Polymorphism)
- servlet的三种创建模式