JavaScript ajax

161 阅读3分钟

概念

ajax - async JavaScript and xml === 异步js和xml - 异步代码的永远在同步代码后执行。

ajax可以在不刷新页面的情况下,发送http请求,返回数据

发送的数据格式:主要是json格式,xml现在用的不多

异步请求基于上述模式,浏览器把请求交给代理对象 - XMLHttpRequest(绝大多数浏览器都内置了这个对象),由代理对象向服务器发起请求,接收、解析服务器响应的数据,并把数据更新到浏览器指定的控件上。从而实现了页面数据的局部刷新。异步请求使浏览器不用等待服务器处理请求,不用重新加载整个页面来展示服务器响应的数据,在异步请求发送的过程中浏览器还能进行其它的操作。

                                                  ** 异步请求的执行流程图:**

ajax可同步可异步

发送get请求的步骤

  1. 创建对象
var xhr = new XMLHttpRequest()
  1. 建立连接
xhr.open('get',url,是否异步)
  1. 监听状态
xhr.onreadystatechange = function(){
    // 在这里可以获取ajax的所有状态 xhr.readyState属性
    // 4是请求完成,200是与后台交互时返回的一个状态码-HTTP状态码
    if (xhr.readyState === 4) {
        if(xhr.status>=200&&xhr.status<300){
            console.log("请求完成");
        // 获取到响应主体
        var res = xhr.responseText
        }
    }
}
  1. 发送请求
xhr.send()

post请求

  1. 创建ajax请求对象 - 0
var xhr = new XMLHttpRequest()
  1. 建立一个ajax链接:xhr.open(请求方式,url,是否异步) 1 建立了还没发送
// ajax可同步可异步,默认异步
xhr.open("post",'demo.php',true)
// 如果是同步ajax会给出警告-建议使用异步操作,因为同步就是按顺序执行,先发送请求,当监听状态的时候,就已经发送成功了 
- 建议在写ajax时,先监听状态,再发送请求
  1. 监听ajax状态 3数据接收中,4请求完成
xhr.onreadystatechange = function(){
    // 在这里可以获取ajax的所有状态 xhr.readyState属性-4表示请求完成
    if (xhr.readyState === 4) {
        if(xhr.status>=200&&xhr.status<300){
            console.log("请求完成");
        // 获取到响应主体
        var res = xhr.responseText
        }
    }
}
  1. post请求需要先设置数据格式 - 请求头 - 模拟表单提交
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
  1. 发送这个请求,xhr.send(传送请求主体)2 发送这个请求
xhr.send("pid="+pid&"name="+name)

常见响应状态码 - xhr.status

200交易成功

302临时移动,客户端应使用原url

303永久移动,返回信息包括新的url和请求方式(get/post)

304服务器接收到请求,但请求的资源未发生修改,数据从浏览器缓存中读取

401要求用户进行身份认证

403服务器理解客户端请求,但拒绝此请求

404服务器无法根据客户端请求找到资源

500服务器内部错误,无法完成请求

502作为网关与代理服务器尝试执行请求时,从远程服务器接受到了一个无效的响应

503服务器过载或维护

ajax优点

  1. 不需要插件支持 - 支持js
  2. 不刷新页面,用户体验好
  3. 提升web性能,异步发送http请求,只需发送部分数据 - 减轻浏览器负担 缺点:
  4. 不能后退
  5. 对搜索引擎支持不太友好,搜索爬虫爬不到 - 没有标签

错误处理语法

try{ //尝试运行,如果运行成功了,后面的catch就不运行了
    要执行的代码段
}catch(err){   //catch捕获 - 捕获执行失败的错误  -  错误信息就是参数err
    // catch可以运行失败之后的代码
    代码段
}

这个结构通常是做兼容处理

事件监听器 - 兼容写法

 try{
    btn.addEventListener('click',function(){
        console.log(123)
    })
}catch(err){
    //自己处理错误,避免js中报错就会终止代码
    btn.addachEvent('onclick',function(){
        console.log('错误信息'+err)
    })
}