【红宝书】第21章Ajax与Comet

AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

XMLHttpRequest对象

1.1XHR的用法

let xhr = new XMLHttpRequest()

open()方法不会真正发送请求,而只是启动一个请求以备发送,接收3个参数:要发送的请求类型、请求URL、是否异步发送请求

xhr.open("get","example.php",false)

发送特定请求,调用send()方法。接收1个参数,即要作为请求主体发送的数据。若没有数据则必须传入null。调用send()之后,请求就会被分派的服务器。

xhr.send(null)

若请求是同步的,JS代码就会等到服务器响应之后再继续执行。

在收到响应后,响应的数据会自动填充XHR对象的属性,属性如下

1.responseText:作为响应主题被放回的文本

2.responseXML:如果响应的内容类型是"text/xml"或"application/xml",这个属性中将保存包含着相应数据的XML DOM文档。

3.status:响应的HTTP状态

4.statusText:HTTP状态的说明

接收响应先检查status属性判断是够成功。一般将200作为成功标志。此时responseText属性内容已就绪,若内容类型正确responseXML也能访问。状态码304表示请求的资源并没有被修改,可以直接使用浏览器中缓存的版本。

        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
            alert(xhr.responseText)
        } else {
            alert("request was unsuccessful:" + xhr.status)
        }

多数情况发送异步请求,才能让JS继续执行而不必等待响应。此时可以检测XHR对象的readyState属性,该属性表示请求/响应过程的当前活动阶段。可取值如下

0:未初始化,尚未调用open()方法

1:启动。已调用open(),为调用send()

2:发送。已调用send(),但尚未接收到响应

3:接受。已经接收到部分响应数据。

4:完成。已经接收到全部响应数据,而且可以在客户端使用。

主要readyState属性的值有一个值变换一个值,就会触发一次readystatechange事件。可以利用该事件检测每次状态变化后的readyState值。必须在调用open前指定该事件才能确保跨浏览器兼容性

        let xhr = new XMLHttpRequest()
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
                    alert(xhr.responseText)
                } else {
                    alert("request was unsuccessful:" + xhr.status)
                }
            }
        }
        xhr.open("get", "examlpe.text", false)
        xhr.send(null)

在接受到响应内容之前可以调用absort()方法取消异步请求:

xhr.abort()

调用该方法XHR对象会停止触发事件,而且也不再允许访问任何与响应有关的对象属性。在终止请求后,还应该对XHR对象进行解引用操作。由于内存原因,不建议重用XHR对象。

1.2HTTP头部信息

每个HTTP请求和响应都会带有相应的头部信息。

默认情况发送XHR请求的同时会发送下列头部信息

Accept:浏览器能够处理的内容类型

原文地址:https://www.cnblogs.com/Mijiujs/p/12200278.html

时间: 2024-10-10 10:09:25

【红宝书】第21章Ajax与Comet的相关文章

第21章 Ajax 与 Comet

第21章 Ajax 与 Comet 21.1 XMLHttpRequest 对象 21.1.1 XHR的用法 21.1.2 HTTP 头部信息 21.1.3 GET请求 21.1.4 POST请求 21.2 XMLHttpRequest 2级 21.2.1 FormData 21.2.2 超市设定 21.2.3 overrideimeType()方法 21.3 进度事件 21.3.1 load事件 21.3.2 progress事件 21.4 跨域资源共享 21.4.1 IE对CORS的实现 2

OPENGL 红宝书实验笔记

第一个程序triangles的配置过程,原文链接. OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境搭建指南 书中的地址 http://www.opengl-redbook.com/ 去这里打包下载OpenGL红宝书的示例代码,解压后是这样 虽然没有第一章的代码但第一章的内容好歹算一个完整的例子,网上各种环境搭建教程也都以第一章的代码为例,我们就

熬了多少个夜晚,大家期待的《网络工程师思科华为华三实战案例红宝书》即网工必备技术命令大全版本1完书

熬了多少个夜晚,最近也没空更新博客.军哥编写的大家期待的<网络工程师思科华为华三实战案例红宝书>即网工必备技术命令大全版本1完书,一本融合了思科华为华三的实战型辅导书(辅助乾颐堂QCNA课程的).不多说上图 目录关于作者 2本书读者和笔者心语 3本书内容和结构 4第1部分 网络实施基础 15案例0 模拟器的部署和连接管理 16学习利器模拟器简书 160.1 华为模拟器Ensp部署 160.2 思科模拟器EVE部署 310.3 部署SecureCrt管理网络设备 400.3.1 部署终端管理软件

【转载】关于在vs2013中配置opengl红宝书第八版环境

 本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版, 第一个例子研究了一段时间终于可以运行了,不知道有没有童鞋跟我遇到一样的问题. 下面说说我怎么配置的: 首先去 http://www.opengl-redbook.com/ 下载红宝书的源代码,解压得到这个 然后打开vs2013新建一个空的win32控制台项目, 然后点项目右键属性,点击vc++目

VS2012通过makefile编译OpenGL红宝书的示例代码

> 通过创建新VC项目,然后设置一堆属性,对于懒人来说还是太复杂了.既然它自带了makefile,可以尝试下使用nmake. 需要注意的是VS2012的安装目录里面已经没有GL的头文件和库文件.这个改动应该在VS2010或者更早就已经采用了. 现在有了VS SDK.VS2010自动的SDK目录是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A,更高的版本可能使用v8.0.v8.0A,反正都在这个目录下面.这个目录下面有include.lib文

[OpenGL红宝书]第一章 OpenGL概述

第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向OpenGL传输数据 42 将传输数据到OpenGL 43 顶点着色 44 细分着色 45 几何着色 46 图元装配 47 剪切 48 光栅化 49 片元着色 410 逐片元的操作 5 第一个程序深入分析 51 进入main函数 52 OpenGL的初始化过程 初始化顶点数组对象 分配顶点缓存对象 将数

【红宝书】第8章.BOM

浏览器对象模型,用于访问浏览器的功能.W3C为了把浏览器中JS最基本的部分标准化,已将BOM的主要方面纳入HTML5规范. 8.1 window对象 BOM的核心,表示浏览器实例.在浏览器中,window对象即是通过JS访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象. 8.1.1全局作用域 由于window对象扮演着ECMAScript中的Global对象,所有在全局作用域中声明的变量.函数都会变成window对象的属性和方法. 全局变量不能通过delete操作符删除,

【红宝书】第6章.面向对象的程序设计

面向对象(Object-Oriented,OO) 类 6.1理解对象 创建Object的实例,然后添加属性和方法 let person = new Object(); person.name = "AAA"; person.sayName = function() {}; 对象字面量模式 let person = { name: "AAA", sayName: function() {} }; 6.1.1属性类型 用特性(attribute)描述属性(propert

【红宝书】第7章.函数表达式

定义函数的方法两种 函数声明 function fnName(arg0, arg1, arg2) { //函数体 } 重要特征:函数声明提升 函数表达式 let fnName = function(arg0, arg1, arg2) { //函数体 } 即创建一个匿名函数(因为function关键字后面没有标识符)赋值给变量fnName 使用前必须先赋值 7.1递归 递归函数是一个函数通过名字调用自身的情况下构成的 function fn(num) { if (num <= 1) { retur