XMLHttpRequest对象与ajax请求

Ajax技术的核心是XMLHttpRequest对象(简称xhr);
xhr为向服务器发送请求和解析服务器响应提供了流畅的接口;能够以异步的方式从服务器获取更多的信息,意味着用户单击以后,可以不用刷新页面就获取新的数据;

XMLHttpRequest对象

目前市场上的主流浏览器都支持原生的XHR对象,在这些浏览器中创建XHR对象需要使用XMLHttpRequest构造函数;
XHR对象中的一些方法:
1,open();接收三个参数(请求类型get/post,请求url,是否异步发送请求的布尔值);

  • 要点:Ajax默认是异步请求,open默认是true;—(async : true)
 // ajax默认是异步编程:不会等待响应内容;
        var xhr=new XMLHttpRequest();
        xhr.open("get","http://localhost:3000/first");
        xhr.send();
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4){
                console.log("2");
                console.log(xhr.responseText);
            }
        }
        console.log("1");
        // 1 ,2, 'hello ajax'

2,send():接收一个参数,即请求参数数据;

// 传递post 请求参数
var xhr=new XMLHttpRequest();
var params = 'name=lisi';
xhr.open("post","http://localhost:3000/post");
xhr.send(params); // post请求参数,放在发送里面; 和get不一样
// 传递get 请求参数
var xhr=new XMLHttpRequest();
var params = 'name=lisi';
xhr.open("get","http://localhost:3000/get?"+params); // get请求参数放在url后面
xhr.send(); 

请求发送完毕;接到响应后,服务器响应的数据会自动填充到XHR对象的属性中
responseText:响应主体数据; responseXML:如果响应的内容类型是’text/xml或application/xml;那么这个属性将保存着响应数据的XML DOM文档
status:响应的HTTP的状态; statusText:****HTTP状态的说明;

无论响应的内容类型是什么,响应主体数据都会保存到responseText属性中,而对于非XML数据而言,responseXML属性的值将为null;

多数情况下,我们都是发送的异步请求,这样才能让js代码继续执行而不必等到响应;此时我们可以根据XHR对象的readyState属性来监测响应状态;
readyState属性:响应返回成功的时候得到通知;
(1)0:请求未初始化,open还没有调用;
(2)1:服务器连接已建立,open已经调用了,但尚未调用send方法;
(3)2:调用send方法,请求已经发送,尚未接收到响应;
(4)3:请求处理中,也就是接收到部分响应内容了;
(5)4:请求已完成,已经接收到全部响应内容,也就是响应完成了;
readyState属性的值每一次的改变都会触发一次readystatechange事件;

HTTP头部信息

每一次http请求和响应都会携带相应的头部信息;常见的头部信息字段(不同的浏览器实际发生的请求头信息不同):

Accept: 浏览器能够处理的内容类型;
Accept-Charset: 浏览器能够显示哪些字符集;
Accept-Encoding: 浏览器能够处理编码;
Accept-Language: 浏览器当前设置的语言;
Connection: 连接选项,浏览器与服务器之间连接的类型;
Content-Length:内容长度,传送的数据大小;
Content-Type:内容类型;
Cookie:当前页面设置的cookie;
Cache-Control: 缓存策略,如no-cache,详见官方文档;
Host: 请求的主机;
Referrer:发出请求页面的url;

XHR对象也提供了两个操作头部信息的方法;setRequestHeader()和getResponseHeader();

setRequestHeader():接收两个参数(头部字段的名称,值),可以自定义设置头部信息;
getResponseHeader():接收两个参数(头部字段的名称),可以获取相应的响应头部信息;

GET请求:

get是最常见的请求类型,通常用于向服务器查询数据内容;get请求将查询参数追加到url的末尾;

 // 为按钮注册点击事件
        btn.onclick=function(){
            // 创建ajax对象
            var xhr=new XMLHttpRequest();
            // 获取用户在文本框输入的值
            var nameValue=username.value;
            var ageValue=age.value;
            // 拼接请求参数
            var params="username="+nameValue+"&age="+ageValue;
            // 配置ajax对象
            xhr.open("get","http://localhost:3000/get?"+params); //get请求参数 加在这里
            // 设置请求头
            xhr.setRequestHeader('Content-Type': "application/x-www-form-urlencoded");
            // 发送请求
            xhr.send();
            // 获取服务器响应的数据
            xhr.onload=function(){
                console.log(xhr.responseText);
            }
        };

POST请求:

post请求也是常见的请求类型;通常用于向服务器发送较大的数据内容(需要用于保存的);

// 为按钮注册点击事件
        btn.onclick=function(){
            // 创建ajax对象
            var xhr=new XMLHttpRequest();
            // 获取用户在文本框输入的值
            var nameValue=username.value;
            var ageValue=age.value;
            // 拼接请求参数
            var params="username="+nameValue+"&age="+ageValue;
            // 配置ajax对象
            xhr.open("post","http://localhost:3000/post"); 
            // 设置请求头
            xhr.setRequestHeader('Content-Type': "application/x-www-form-urlencoded");
            // 发送请求
            xhr.send(params);// post请求参数,放在发送里面;
            // 获取服务器响应的数据
            xhr.onload=function(){
                console.log(xhr.responseText);
            }
        };
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值