XHR2通讯基础

xhr2于xhr最大的区别在于xhr只支持字符串类型的数据,而xhr2支持任意类型的数据。使用XHR2向服务器请求一张图片。跨域

 1 <script>
 2   var xhr=new XMLHttpRequest();
 3   xhr.open('get','image.jpg',true);
 4   //处理返回类容的类型
 5   xhr.responseType='blob';
 6   xhr.onload=function(e){
 7        if(this.status==200){
 8           var url=window.URL.createObjectURL(this.response);
 9           var img=new image();
10           img.src=url;
11           document.body.appendChild(img);
12        }
13   }
14   xhr.send();
15 </script>

ArrayBuffer服务器

ArrayBuffer是一种数据类型,存放原始的固定长度的二进制数据,但ArrayBuffer没法操做它的类容,必须建立一个表明固定格式的ArrayBufferView来 读取具体的二进制数据。 实例cookie

 var buffer=new ArrayBuffer(16);app

 var int32View=new Int32Array(buffer);post

同一块内存buffer能够被多个视图所超控。this

FormDataurl

XHR2的新类型,使用FormData提交表单spa

1:常见的提交表单
var formdata=new FormData();
formdata.append('username','frienr');
var xhr=new XMLHttpRequest();
xhr.open('post','/server',true);
xhr.send(formdata);

2:直接提交表单元素
function sendForm(form){
  var formData=new FormData(form);
  //在以知的表单后添加
  formdata.append('token','1233');
   xhr.send(formdata);
}
sendForm(document.getElementById('form1'));

xhr2新增了个upload属性,并能够为之绑定一个onprogress事件,检测上传的速度code

<progress></progress>
<script>
  var xhr=new XMLHttpRequest();
  xhr.open('POST','/SERVER',true);
  xhr.onload=function(){......}
  //配合HTML5的progress一块儿使用
  var progressBar=document.querySelector('progress');
  xhr.upload.onprogress=function(e){ 
     if(e.lengthComputable){
       progressBar.value=(e.loaded/e.total)*100;
     }
  };
  xhr.send(blobOrFile)
}
var int16Array=new Int16Array(16)
var blob=new Blob([int16Array])
upload(blob);
</script>

xhr不能跨越,但xhr2新增了跨源资源共享的能力在服务器设置一些标头实现真正的跨域Ajax请求 能够跨某个域的http标头orm

Access-Control-Allow-Origin:http://example.com 

能够来自全部域的访问

Access-Control-Allow-Origin:*

让跨域的http请求带上cookie等 Access-Control-Allow-Credentials:true

在客户端发送请求时须要在发送请求前将xhr的对象withCredentials设置为true eg xhr.withCredentials=true;

相关文章
相关标签/搜索