AJAX(四):XHR2支持的方法

XMLHttpRequest 1级只是把已有的XHR对象的实现细节描述了出来。而XMLHttpRequest 2级则进一步发展了XHR

FormData
FormData为序列化表单以及创建与表单格式相同的数据(用于通过XHR传输)提供了便利

//通过append方法增加信息 append()方法接收两个参数:健和值
var data = new FormData();
data.append('name', 'Nicholas');
//通过FormData构造函数传入表单元素
var data = new FormData(document.form[0])

xhr.open('post', 'postexample', true);
var form = document.getElementById('user-info');
xhr.send(new FormData(form));

使用FormData的方便之处体现在不必明确地在XHR对象上设置请求头部。XHR对象能够识别传入的数据类型是FormData的实例,并配置适当的头部信息

 

overrideMimeType()方法

用于重写XHR响应的MIME类型,因为返回响应的MIME类型决定了XHR对象如何处理它,所以提供一种方法能够重写服务器返回的MIME
类型是很有用的

var xhr = createXHR();
xhr.open('get', 'text.php', true);
xhr.overrideMimeType('text/xml');
xhr.send(null);

 

进度事件
1)load事件。最终,Firefox在简化异步交互模型中实现了load事件,用以替代readystatechange事件。响应接收完毕后将触发load事件,因此也就没有必要去检查readyState属性了

var xhr = createXHR(); 
xhr.onload = function(){ 
    if((xhr.status >=200 && xhr.status < 300 ) || xhr.status == 304 ){ 
        alert(xhr.responseText); 
    }else{ 
        alert("Request was unsuccessful : " + xhr.status); 
    } 
} 
xhr.open('get', 'altevents.php', true);
xhr.send(null);

只要浏览器接收到服务器的响应,不管其状态如何,都会触发load事件,但必须要检查status属性,才能确定是否真的已经可用了,firefox,opera,chrome,safari都支持load事件
2)progress事件
这个事件会在浏览器接收到新数据期间周期性地触发,而progress事件会接收到一个event对象,其target属性是xhr对象,但包含着三个额外的属性:
lengthComputable:是一个表示进度信息是否可用的布尔值
position:表示意境接收的字节数
totalSize:表示根据content-length响应头部确定预期字节数。
eg:

var xhr = createXHR(); 
xhr.onload = function(){ 
    if((xhr.status >=200 && xhr.status < 300 ) || xhr.status == 304 ){ 
        alert(xhr.responseText); 
    }else{ 
        alert("Request was unsuccessful : " + xhr.status); 
    } 
} 
xhr.onprogress = function(){ 
    var divStatus = document.getElementById('status');
    if(event.lengthComputable){
        divStatus.innerHTML = 'Received' + event.position + 'of' + event.totalSize + ' bytes'
    }
} 
xhr.open('get', 'altevents.php', true);
xhr.send(null);

为确保正常执行,必须在调用open()前添加onprogress事件

posted @ 2018-03-17 07:30  wzndkj  阅读(284)  评论(0编辑  收藏  举报