javascript的原生ajax

ajax是浏览器提供的用于操作浏览器的sdk,可以让浏览器帮我们发送请求和后台交互。
http协议
请求报文:

请求行 url method
请求头
Content-Type:application/x-www-form-urlencoded
请求体
如果请求方式是get,请求体没有数据

响应报文:

响应行 200 OK
响应头 Content-Type :“application/json”
响应体 “{“status”:“200”,“message”:“登录成功”,data:{}}”

            1)实例化xhr对象
                var xhr = new XMLHttpRequest();

            2)设置请求行
                xhr.open(method,url,async)
                method请求方法
                url请求地址
                async是否异步,默认为true
            3)设置请求头
                xhr.setRequestHeader(k,v)
                如果是get方式,无需设置Content-Type,因为Content-Type请求体中数据编码格式
            4)设置请求体
                data为对象
                xhr.send(data)
                当method=get,data就不需要了
                如果第三步中设置Content-Type="application/json"
                    xhr.send(JSON.stringify(data))
                如果第三步中设置Content-Type="application/x-www-form-urlencoded"
                    xhr.send(qs.stringify(data))
            5)监听请求状态的改变
                xhr.onreadystatechange = function(){
                    if(xhr.readyState === 4){
                        if(xhr.status === 200){
                            var resp = JSON.parse(xhr.response)
                                status:业务状态
                                message:业务消息
                                data:   查询的数据
                                timestamp: 事件戳
                        }
                    }
                }
               
                xhr.readyState
                    浏览器的就绪状态
                xhr.status
                    服务器端的响应状态
                业务状态(前后台程序员协商的)
                
   xhr.status
    响应状态
    200   ok
    404   not found
    500   服务接口出错
    401   未授权
    403   被拒绝,无权访问

    readystate
    表示xhr的状态
    0   UNSENT  代理被创建,但尚未调用 open() 方法。
    1   OPENED  open() 方法已经被调用。
    2   HEADERS_RECEIVED    send() 方法已经被调用,并且头部和状态已经可获得。
    3   LOADING     下载中; responseText 属性已经包含部分数据。
    4   DONE    下载操作已完成。

在发送posr请求前会先发送一个OPTIONS请求
OPTIONS请求也称为探兵请求,在正式请求发送之前发送的一个检测服务端的请求
并且Content-Type的取值不是以下三种之一:
1. application/x-www-form-urlencoded
查询字符串 默认
忽略空格
2.multipart/form-data
文件流/二进制流
上传文件 图片
3.text/plain
会将空格转换为+,纯文本

我们在做项目的时候一般不用这种原始开发,而是使用一些封装好的异步处理,如ajax和axio。它们其实是将原生的ajax进行封装,进而简化使用。
post方法一般有两种参数,一种为查询字符串,另一种为JSON字符串。
如果为查询字符串,Content-Type=“application/x-www-form-urlencoded”,
JSON字符串:Content-Type=“application/json”。js的原始ajax的post请求默认为JSON,而jquery的ajax默认为查询字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值