Ajax请求

一、创建XHR

1、在IE7及其更高的版本中:

var xhr = new XMLHttpRequst();

2、在IE7之前的的版本中使用createXHR函数根据IE中可用的MSXML库创建最新版本的XHR对象:

function createXHR(){if (typeof XMLHttpRequest != "undefined"){return new XMLHttpRequest();} else if (typeof ActiveXObject != "undefined"){if (typeof arguments.callee.activeXString != "string"){var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];var i;var len;for (i=0,len=versions.length; i < len; i++){try {new ActiveXObject(versions[i]);arguments.callee.activeXString = versions[i];break;} catch (ex){//skip}}}return new ActiveXObject(arguments.callee.activeXString);} else {throw new Error("No XHR object available.");}}
var xhr = createXHR();

二、XHR的用法

xhr包含四个方法:
xhr.open();//接受3个参数:发送请求的类型,请求的地址,是否异步请求
xhr.setRequestHeader();//接受两个参数:设置htttp头部的名字,设置http头部的值
xhr.send();//接受一个参数:作为请求主体的数据
xhr.abort();//取消异步请求

1、xhr.open()以及xhr.send()

xhr.open()注意:发送请求的地址相对执行代码的当前页面。

当调用send()之后,请求将发送到后台并且服务器响应之后xhr对象的属性将被自动填充:

responseText:获得字符串形式的响应数据。
responseXML:获得 XML 形式的响应数据。
status:响应http的状态。
statusText:响应状态说明。

2、readyState属性

说明:这个属性表示请求或者是响应个过程的当前活动阶段。

0: 未初始化。未调用open()方法。
1: 启动。已调用open(),未调用send()
2: 发送。已调用send(),尚未接收到响应数据
3: 接收。接收到部分响应数据
4: 完成。已经接收到所有数据

readyState每次改变时将会触发readystatechange事件。
可以在调用open()之前指定onreadystatechange事件处理程序才能确保跨浏览器的兼容性。

//例子
var xhr = createXHR();
xhr.onreadystatechange = function(event){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", "example.txt", true);
xhr.send(null);

三、请求类型

1、GET请求

说明:用于向服务器查询信息。
通常将查询的变量加在请求地址之后
比如说:xxx.xxx.xx?id=2 向服务器传递了一个参数名字叫name值为1

用下面这个函数实现添加参数

function addURLParam(url, name, value) {url += (url.indexOf("?") == -1 ? "?" : "&");url += encodeURIComponent(name) + "=" +encodeURIComponent(value);return url ;
}

2、POST请求

说明:通常向服务器发送应该保存的数据

使用方法:

xhr.open('post','请求地址',true);

post请求消耗的资源比get请求要多。发送相同的数据,get的速度最多可以达到post的两倍

四、XMLHTTPRequest 2级

1、FormData

说明:序列化表单以及创建与表单格式相同的数据。
之前在文章中提到过,具体点这里

2、超时限定

XHR的timeout属性,表示请求等待响应多少毫秒之后就会自动终止。
请求终止时会调用ontimeout事件处理程序,此时readyState为4,这就会调用onreadystatechange事件。但是如果超时终止请求之后再访问status属性就会报错。这里可以使用try-catch中去处理检查status属性。

3、overrideMimeType()

强行让XHR对象将响应作为XML处理。

4、进度事件

loadstart:在接收到相应数据的第一个字节时触发。
progress:在接收相应期间持续不断触发。
error:在请求发生错误时触发。
abort:在因为调用abort()方法而终止链接时触发。
load:在接收到完整的相应数据时触发。
loadend:在通信完成或者触发error、abort或load事件后触发。

每个请求不对触发Loadstart事件开始,接下来是一或多个progress事件,然后触发error、abort或load事件中的一个,最后以触发loadend事件结束。

4.1

Firefox在实现XHR对象的某个版本时,曾致力于简化异步交互模型。最终,Firefox实现中引入了load事件,用以替代readystatechange事件。响应接收完毕后将触发Load事件,因此也就没有必要去检查readyState属性了。而onload事件处理程序会接收到一个event对象,其target属性就指向XHR对象实例,因而可以访问到XHR对象的所有方法和属性。然而,并非所有浏览器都为这个事件实现了适当的事件对象。结果,开发人员还是要像下面这样被迫使用XHR对象变量。

var xhr = createXHR();
xhr.onload = function () {if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {alert(xhr.responseText);} else {alert("Request was unsuccessful: " + xhr.status);}
};
xhr.open("get", "altevents.php", true);
xhr.send(null);

只要浏览器接收到服务器的响应,不管其状态如何,都会触发load事件。而这意味着你必须要检查status属性,才能确定数据是否真的已经可用了。Firefox、Operan、Chrome和Safari都支持load事件。

4.2、progress事件

progress事件会在浏览器接收新数据期间周期性地触发。而onprogress事件处理程序会接收到一个event对象,其target属性是XHR对象,但包含着三个额外的属性:lengthComputable、loaded和total。其中,lengthComputable是一个表示进度信息是否可用的布尔值,loaded表示已经接收的字节数,loaded表示根据Content-Length响应头部确定的预期字节数。有了这些信息,我们就可以为用户创建一个进度指示器了。

JavaScript原生Ajax相关推荐

  1. php原生的异步请求,原生JavaScript实现Ajax异步请求

    ajax现在是一种非常流行的技术,现在虽然可以利用JQuery或者一些第三方插件甚至微软提供的一些控件可以方面的实现ajax功能,但是明白其原理也是非常重要的,下面是来使用纯javascript实现获 ...

  2. 使用原生javascript实现ajax提交form表单

    使用原生javascript实现ajax提交form表单 ============================ 1 准备表单        首先我们需要编写一个html代码,这里我是采用nodej ...

  3. JavaWeb 第6章 Ajax 与 JQuery 任务1:使用原生 JavaScript 发送 Ajax请求

    JavaWeb 应用设计及实战 目录 上一章  下一章 上一个任务/上一节       下一个任务/下一节 实例链接  点我 目录 任务1  使用原生 JavaScript 发送 Ajax 请求 6. ...

  4. php通过js发送请求数据,使用原生javascript发送ajax请求数据的步骤

    注:请求地址是自己的项目地址,请自行更改.这只是一个简单的原生XMLHttpRequst的使用,之后会发如何封装原生ajax实现jequery的ajax 第一步:创建xhr对象.const xhr = ...

  5. Ajax→异步的JavaScript和XML、HTTP请求响应、Ajax简介同步异步、XMLHttpRequest类的方法及属性、原生Ajax、Koa实现Ajax、接口文档、浏览器同源策略、反向代理

    浏览器服务器 HTTP请求响应 数据库后端语言 Ajax简介同步异步 Koa前端框架 XMLHttpRequest类的方法及属性 原生Ajax Koa实现Ajax JSON DOM 接口文档 浏览器同 ...

  6. ajax不执行_好程序员Java学习路线分享原生Ajax的使用

    好程序员Java学习路线分享原生Ajax的使用,首先我们先来看一下什么是 AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 就是 异步.JavaScript ...

  7. 对原生ajax的理解

    $.ajax({url:'',//请求文件路径type:'',//请求方式GET POSTdata:{},//要发给服务器的数据参数dataType:'',//希望接口返回的数据格式json,stri ...

  8. .ajax get 写法,原生Ajax写法(GET)

    ajax的GET提交方式的原生代码: var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else if(w ...

  9. Django学习---原生ajax

    Ajax 原生ajax Ajax主要就是使用 [XmlHttpRequest]对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件). ...

最新文章

  1. UVA 10214 Trees in a Wood
  2. java内存溢出怎么排查_【转】Java学习---内存溢出的排查经历
  3. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】
  4. 源代码管理工具优缺点
  5. element-ui中表单验证rules
  6. 闲鱼的云原生故事:靠什么支撑起万亿的交易规模?
  7. java移动端接口测试_借助Charles来测试移动端-下篇
  8. 推荐一些数据挖掘和生信友好的SCI!
  9. HWSD土壤数据集下载及打开方法
  10. 使用hMailServer邮箱服务器收发邮件
  11. Altium Designer_PCB板装配图的PDF文件输出
  12. 用Excel和OutLook实现自动批量发邮件
  13. android实现从耳机和自带麦克风,android插上耳机的时候仍然使用机身的麦克风录音,解决!...
  14. 使用Matlab对二值图像进行轮廓提取
  15. Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)15-28章
  16. lenovo thinkpad t460s trackpiont小红点移动速度调整
  17. 一文带你了解 AAVE,并实操
  18. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题
  19. 自定义微博小尾巴(源码+解析)
  20. java计算机毕业设计中小型饭馆餐饮管理系统源码+mysql数据库+系统+部署+lw文档

热门文章

  1. Recursive Depth first search graph(adj matrix)
  2. .NET 调用外部exe程序,出现已停止工作
  3. 人性歪曲的心理调适 一【浮躁心理、偏激心理、自卑心理、自杀心理、愤怒心理】...
  4. Physical Plausible Shading
  5. 「造个轮子」——设计 HTTP 请求全局上下文
  6. MySQL远程连接ERROR 2003 (HY000) Cant connect to MySQL server on (10060)
  7. Android获取手机屏幕宽高
  8. 推荐:安全公司的一些面试题
  9. wordpress插件列表
  10. Oracle数据导入导出imp/exp命令 [转]