《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方式
一、AJAX概述
AJAX是Asynchronous JavaScript and XML的缩写。中文译作异步JavaScript和XML。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。在不又一次载入页面的情况下,与server交换数据并更新部分网页的艺术。
其核心是:client的Javascript可以与webserver进行异步数据交换。
二、AJAX基础---XMLHttpRequest对象
全部现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。XMLHttpRequest 用于在后台与server交换数据。这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行更新。
1、创建 XMLHttpRequest 对象的语法:
var obj1 = new XMLHttpRequest();。
IE5和IE6中。使用ActiveX对象:var obj2 = new ActiveXObject("Micorosoft.XMLHTTP");
能够用例如以下方式保持兼容:
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");
}
2、XMLHttpRequest 对象的方法和属性
XMLHttpRequest 对象的方法和属性用来向server发送请求和从server获取响应。
2.1 发送请求:open()和send()
open()方法用于创建一个请求。创建的HTTP请求并未发送,直到调用send()方法才被发送
method不区分大写和小写。URL能够是绝对或者相对地址。async默觉得true,意味着并不会马上返回数据。string參数可选,用于定义发送请求的正文(最好用字符串格式,而且使用setRequestHeader()方法定义请求报头的内容内型及编码方式)。
2.2
setRequestHeader():设置请求报头,将和请求一同发送到服务端
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
//假设须要像 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");
2.3 abort():终止请求 。没有參数。
三、AJAX获取server响应
利用XMLHttpRequest对象和属性获取server的响应,包含HTTP报头和响应的正文。
1、xmlObj.getAllResponseHeaders():获取全部响应的报头,以字符串形式返回。每一个HTTP报头名称和值用冒号分隔。如myheader:myvalue,并以\r\n结束。
2、xmlObj.getResponseHeader(param):获取响应中某个特定的字段值。參数param是一个响应的HTPP字段名。
3、responseText和responseXML属性
均为仅仅读属性。用于返回server中响应的正文。
<span style="font-size:14px;">//responseText属性
document.getElementById("myDiv").innerHTML=xmlhttp.responseText; ////responseXML属性
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementById("myDiv").innerHTML=txt;</span>
4、status和statusText属性
均为仅仅读属性,用于推断响应状态。
status表示响应中的状态码。如404,200等,statusText表示状态文本信息。如OK,Not Found。状态码和文本信息一一相应,常见例如以下:
这两个属性仅在send()方法发送数据并接收到server响应完成后才有效。
5、readyState属性
该属性表示HTTP请求的状态码,仅仅读,返回一个整数,其值和说明例如以下:
0 描写叙述一种"未初始化"状态;此时,已经创建一个xmlhttprequest对象,可是还没有初始化。
1 描写叙述一种"发送"状态;此时,代码已经调用了xmlhttprequest open()方法而且xmlhttprequest已经准备好把一个请求发送到server。
2 描写叙述一种"发送"状态;此时,已经通过send()方法把一个请求发送到server端,可是还没有收到一个响应。
3 描写叙述一种"正在接收"状态;此时,已经接收到http响应头部信息,可是消息体部分还没有全然接收结束。
4 描写叙述一种"已载入"状态;此时,响应已经被全然接收。
四、onreadystatechange 事件
readyState 属性存有 XMLHttpRequest 的状态信息。每当 readyState 改变时。就会触发 onreadystatechange 事件。
onreadystatechange属性能够指定一个函数,当状态改变就调用该函数。
函数常常与readyState/status/statusText属性确定响应的详细状态
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
五、解决请求被浏览器缓存的问题
在使用XMLHttpRequest时,要注意的一个问题是载入的内容可能被浏览器缓存。能够对URL參数作改动避免此问题。
经常用法是加上一个随机数作为查询參数。
<span style="color:#000000;">xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);
<span style="font-family:SimSun;">//或者:xmlhttp.open("get","url"+(new Date()).getTime(),true);</span>
xmlhttp.send();</span>
六、点击看实例
《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方式的更多相关文章
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- JavaScript权威指南学习笔记6
这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...
- javascript权威指南学习笔记1
打开这本书,进入到javascript的世界.以前都是看各种视频,感觉什么收获也没有,反而弄得脑袋混乱,希望能够按照这本书的节奏掌握javascript这门语言,为我的前端学习打下基础. 学习前准备: ...
- JavaScript权威指南学习笔记4
今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...
- Javascript权威指南学习笔记
第二章:词法结构 ;function a(){alert(2)};//前面的分号保证正确地语句解析 第三章:类型.值和变量 基本概念: 1.数据类型---能够表示并操作的值的类型叫做数据类型. 2.变 ...
- javascript权威指南学习笔记3
今天看到第四章,记录一下其中的几个点,俗话说:好记性不如烂笔头嘛. 4.9 in运算符和instanceof运算符 in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个 ...
- javascript权威指南学习笔记2
Javascript语言核心(2~12章) 第三章:类型.值.变量 1.数字: overflow(Infinity, -Infinity).underflow(+0,-0) 非数字值:它和任何值都不相 ...
- JavaScript权威指南学习笔记5
下午在杭图回去前看了书中第二部分的13-17章,看的很粗,感觉大部分东西自己已经知道或者平时开发中不会用到,很多章节只是简单的翻了一下,没有仔细思考里面说到的道理,下面对各章节简单的记录下. 第13章 ...
- js权威指南学习笔记(二)表达式与运算符
1.数组初始化表达式 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充undefined.如: 2 2 1 var arr = [1,,,,,6]; 2 ...
随机推荐
- 无类型指针 在delphi中可以直接赋值任何指针类型。
- linux题目整理(二)
1.如何过滤出已知当前目录下oldboy中的所有一级目录(不包含子目录,即只能是一级目录) 方法1:find ./ -type d -maxdepth 1方法2:ls -F方法3:ls -l | g ...
- qt include无法自动补齐
原因一: 检查cmake有没有include_directories 原因二: CmakeList.txt放错位置 原因三: 没有用qt new file来创建头文件
- react 如何处理页面加载时无法将获取缓存信息存入全局变量中
最近在做一个权限功能时,发现在读取用户公司ID进行列表查询 时,无法钭读取到缓存中的数据存入页面全局变量中进行加载查询 将问题代码整理出来 将信息存入缓存: let menuList = Helper ...
- 转 linux任务调度之crontab命令
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...
- Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...
- KDtree浅谈
KDtree浅谈 1.对KDtree的理解 首先要知道$KDtree$的用处,$KDtree$是用来进行多维数点的,一般这些点都是在在而二维及二维以上,因为一维上的问题,我们基本都可以运用线段树来解决 ...
- JAVA 父类与子类初始化顺序问题
main方法-->子类对象的初始化语句(new className()语句)--->子类构造[因为继承的缘故,它先不会执行]--->父类构造[这一步先不会执行]--->父类静态 ...
- [Contest20180418]数学竞赛
题意:初始时$x=0$(长度),当$x$为长度时,你可以把$x$变成$\sin^{-1}x,\cos^{-1}x,\tan^{-1}x$之一($x$变为角度),若$x$为角度,你可以把$x$变成$\s ...
- 【bzoj3687】【简单题】bitset
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=64333782 这次的图是自己画的,方便的话点个赞 ...