AJAX 识XMLHttpRequest与发送AJAX请求与ajax提交数据

东篱把酒黄昏后,有暗香盈袖


前言

耳鸣,真烦人


一、XMLHttpRequest的readyState

readyState属性用于记录XMLHttpRequest对象的状态:

值 状态 描述
0 UNSENT 代理被创建,但尚未调用 open() 方法。(请求未初始化
1 OPENED open() 方法已经被调用。(服务器连接已建立
2 HEADERS_RECEIVED send() 方法已经被调用,并且头部和状态已经可获得。(请求已收到
3 LOADING 下载中;responseText 属性已经包含部分数据。(正在处理请求)
4 DONE 下载操作已完成。(请求已完成且响应已就绪)

当XMLHttpRequest对象的readyState属性的值变成4的时候,表示这个AJAX请求以及响应,已经全部完成了

二、onreadyStatechange

当readyState发生改变时调用onreadyStatechange()

三、发送AJAX请求步骤

四步

  1. 第一步,创建AJAX核心对象,XMLHttpRequest
            var xhr = new XMLHttpRequest();
  1. 第二步,注册回调函数
            xhr.onreadystatechange = function () {
                if (this.readyState == 4) {
                    if (this.status == 200) {
                        //通过XMLHttpRequest对象的responseText属性可以获取到服务器响应回来的内容
                        //并且不管服务器响应回来的是什么,都以普通文本的形式获取(服务器可能响应回来,普通文本、XML、JSON、HTML....)
                        document.getElementById("myspan").innerHTML = this.responseText
                        this.responseText
                    }else {
                        alert(this.status)
                    }
                }
            }
  1. 第三步,开启通道(open只是浏览器和服务器建立连接,通道打开,并不会发送请求)
            xhr.open("GET","/ajax/ajaxrequest2",true)
  1. 第四步,发送请求
            xhr.send()

四、ajax提交数据

get请求提交数据是在“请求行”上提交,格式是url?name=value&name=value…
(HTTP协议中所规定,遵守即可)

			var usercode = document.getElementById("usercode").value;
            var username = document.getElementById("username").value;
            xhr.open("GET","/ajax/ajaxrequest2?usercode="+usercode+"&username="+username,true)
usercode<input type="text" id="usercode"><br>
username<input type="text" id="username">

五、ajax get请求缓存问题

对于低版本的ie浏览器来说,ajax的get请求可能会走缓存,存在缓存问题
什么是ajax 缓存问题?
在HTTP协议中是这样规定get请求的:get请求会被缓存起来
POST请求在HTTP协议中规定的是:POST请求不会被浏览器缓存
GET请求缓存的优点:直接从浏览器缓存中获取资源,不需要从服务器上重新加载资源,速度较快,用户体验好
GET请求缓存的缺点:无法实时获取最新的服务器资源
浏览器什么时候会走缓存?

  1. 是一个GET请求
  2. 请求路径已经被浏览器缓存过了,第二次发送请求的时候,这个路径没有变化,会走浏览器缓存
    如果是低版本的IE浏览器,如何解决ajax get请求的缓存问题?
    可以在url后加一个时间戳或随机数
// xhr.open("GET","/ajax/ajaxrequest2?t="+new Date().getTime()+"usercode="+usercode+"&username="+username,true)
   xhr.open("GET","/ajax/ajaxrequest2?t="+Math.random()+"usercode="+usercode+"&username="+username,true)
            

六、ajax发送post请求

修改open函数中的get即可

            xhr.open("POST","/ajax/ajaxrequest3",true)

在ajaxrequest3对应的方法中也应该重写doPost方法

get请求提交参数:请求行
在这里插入图片描述

post请求提交参数:请求体
在这里插入图片描述
模拟ajax提交form表单

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

可以在form中的enctype属性中拿到

<form enctype="application/x-www-form-urlencoded"></form>

在这里插入图片描述

如果不进行表单模拟就会如下:
在这里插入图片描述
并且拿不到数据


总结

xhr.readyState ajax中的XMLHttpRequest状态码
xhr.status Http协议中的状态码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值