摘自: https://www.cnblogs.com/colima/p/5339227.html
一般来说, 大家可能都会习惯用 JQuery 提供的 Ajax 方法, 但是用原生的 js 怎么去实现 Ajax 方法呢?
JQuery 提供的 Ajax 方法:
- $.ajax({
- url: ,
- type: '',
- dataType: '',
- data: {
- },
- success: function(){
- },
- error: function(){
- }
- })
原生 js 实现 Ajax 方法:
- var Ajax={
- get: function(url, fn) {
- // XMLHttpRequest 对象用于在后台与服务器交换数据
- var xhr = new XMLHttpRequest();
- xhr.open('GET', url, true);
- xhr.onreadystatechange = function() {
- // readyState == 4 说明请求已完成
- if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) {
- // 从服务器获得数据
- fn.call(this, xhr.responseText);
- }
- };
- xhr.send();
- },
- // datat 应为'a=a1&b=b1'这种字符串格式, 在 jq 里如果 data 为对象会自动将对象转成这种字符串格式
- post: function (url, data, fn) {
- var xhr = new XMLHttpRequest();
- xhr.open("POST", url, true);
- // 添加 http 头, 发送信息至服务器时内容编码类型
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
- fn.call(this, xhr.responseText);
- }
- };
- xhr.send(data);
- }
- }
注释:
1. open(method, url, async) 方法需要三个参数:
method: 发送请求所使用的方法(GET 或 POST); 与 POST 相比, GET 更简单也更快, 并且在大部分情况下都能用; 然而, 在以下情况中, 请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时, POST 比 GET 更稳定也更可靠
url: 规定服务器端脚本的 URL(该文件可以是任何类型的文件, 比如 .txt 和 .xml, 或者服务器脚本文件, 比如 .asp 和 .php (在传回响应之前, 能够在服务器上执行任务));
async: 规定应当对请求进行异步 (true) 或同步 (false) 处理; true 是在等待服务器响应时执行其他脚本, 当响应就绪后对响应进行处理; false 是等待服务器响应再执行.
2. send() 方法可将请求送往服务器.
3. onreadystatechange: 存有处理服务器响应的函数, 每当 readyState 改变时, onreadystatechange 函数就会被执行.
4. readyState: 存有服务器响应的状态信息.
0: 请求未初始化(代理被创建, 但尚未调用 open() 方法)
1: 服务器连接已建立(open 方法已经被调用)
2: 请求已接收(send 方法已经被调用, 并且头部和状态已经可获得)
3: 请求处理中(下载中, responseText 属性已经包含部分数据)
4: 请求已完成, 且响应已就绪(下载操作已完成)
5. responseText: 获得字符串形式的响应数据.
6. setRequestHeader():POST 传数据时, 用来添加 HTTP 头, 然后 send(data), 注意 data 格式; GET 发送信息时直接加参数到 url 上就可以, 比如 url?a=a1&b=b1.
来源: http://www.bubuko.com/infodetail-2603115.html