servlet通过xhr向js传递二进制字节数组

ajax的返回值类型:

  • "xml": 返回 XML 文档,可用 jQuery 处理。
  • "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
  • "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
  • "json": 返回 JSON 数据 。
  • "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
  • "text": 返回纯文本字符串
  

二进制类型的返回值没有,经过查询资料,ajax是基于xhr1的,xhr2中可以返回arraybuffer类型,所以需要使用原生的javascript代码;



代码如下:

    xhr=new XMLHttpRequest();   


    xhr.open('get',url,true);


    xhr.responseType='arraybuffer';  


    xhr.send(); 


    xhr.onreadystatechange = function () {

     if(xhr[index].readyState === 4 && xhr[index].status === 200){

     var uInt8Array = new Uint8Array(this.response);

    }

    }


此时可以从servlet中传递字节数组到js页面。


注意这里只能选择异步方式,当选择同步方式的时候会报错,经过查询资料,xhr2的同步方式是不可以的指定 xhr.responseType,所以当需要从后台循环读取字节的时候,选择匿名函数的方式;


    var xhr = [];
    
   
    for (var index = 0; index < rows*columns; index++){


    (function (index){


    xhr[index]=new XMLHttpRequest();   


    xhr[index].open('get',url,true);

    xhr[index].responseType='arraybuffer';  


    xhr[index].send(); 


    xhr[index].onreadystatechange = function () {


           if(xhr[index].readyState === 4 && xhr[index].status === 200){

                var uInt8Array = new Uint8Array(this.response);

                 ……

                pixelArray[index] = new Int16Array(data1.buffer);

         }

    }(index);

}

此时成功将字节数组传到前台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值