《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 ...
随机推荐
- 关于多态的理解,有助于理解TStream抽象类的多态机制。
有的时候 不是很明白流的机制,因为有内存流 文件流 图片流 等等 他们之间的相互转化 靠的就是流的多态性.... unit Unit11; interface uses Winapi.Windows ...
- MSSQL 让排序更方便灵活
SQL: SELECT * FROM table1 ORDER BY CASE WHEN field=value THEN 1 ELSE 0 END (ASC/DESC) 是不是很方便呢,哈哈
- 洛谷——P2026 求一次函数解析式
P2026 求一次函数解析式 题目背景 做数学寒假作业的怨念…… 题目描述 给定两个整点的坐标,求它们所在直线的函数解析式(一次函数). 输入输出格式 输入格式: 输入共两行. 第一行有两个整数x1, ...
- POJ1273 Drainage Ditches (网络流)
Drainage Ditches Time Limit: 1000MS Memor ...
- 反汇编引擎Capstone
反汇编引擎Capstone Capstone是Kali Linux自带的一款轻量级反汇编引擎.它可以支持多种硬件构架,如ARM.ARM64.MIPS.X86.该框架使用C语言实现,但支持C++.P ...
- 【bzoj1598】【 [Usaco2008 Mar]牛跑步】启发式搜索思路+spfa
(上不了p站我要死了,侵权度娘背锅) 最近复习搜索,先从启发式搜索来吧. 感觉启发式搜索这玩意挺玄学的,先从其思想入手,做一道经典的K短路. Description BESSIE准备用从牛棚跑到池塘的 ...
- iOS音频的后台播放 锁屏
初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等, ...
- 在Android中解决内存溢出 – OutOfMemoryError
原文链接:http://riggaroo.co.za/fixing-memory-leaks-in-android-outofmemoryerror/ 注:本文在原文基础上在如何判断内存是否泄露方面进 ...
- SpannableString 转换局部字体大小,但在EditText测量之前设置内容,测量高度为,字体变小之前的高度
public void setHint(@NonNull String hint, @Nullable CharSequence subHint) { this.hint = hint; if (su ...
- NFS 服务配置篇
安装.配置NFS服务 1.NFS简介 NFS(network file system) NFS是一个主机A通过网络,允许其他主机B可以来共享主机A的一个目录文件的一个文件系统 2.需要安装两个包nfs ...