码迷,mamicode.com
首页 > Web开发 > 详细

ajax接收二进制文件并转化成int,string等

时间:2018-02-08 17:51:49      阅读:659      评论:0      收藏:0      [点我收藏+]

标签:slice   tar   target   class   tde   tin   pen   abc   innerhtml   

1.  ajax请求服务器二进制文件的方法。

//二进制Ajax请求
            var xmlhttpbinary;
            //获得请求url的参数
            function GetRequest() {
                    //向服务器发送异步请求
                    xmlhttpbinary = null;
                    if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc.
                        xmlhttpbinary = new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject) {// code for IE6, IE5
                        xmlhttpbinary = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    if (xmlhttpbinary != null) {
                        xmlhttpbinary.responseType = "blob"; //这里要用blob
                        xmlhttpbinary.onreadystatechange = blobxpr_state_Change;
                        xmlhttpbinary.open("GET", "test3.txt", true);
                        xmlhttpbinary.send(null);
                    }
                    else {
                        alert("Your browser does not support XMLHTTP.");
                    }
            }

注释:xmlhttpbinary的请求类型应该是blob

2. 接收返回的数据

function blobxpr_state_Change() {
            if (xmlhttpbinary.readyState == 4) {// 4 = "loaded"
                if (xmlhttpbinary.status == 200) {// 200 = "OK"
                    var bigblob = xmlhttpbinary.response;
                    var reader = new FileReader();
                    var smallblob;
                    smallblob = bigblob.slice(0, 22);                    
                    reader.readAsArrayBuffer(smallblob);
                    reader.onloadend = function (evt) {     //filereader加载blob成功处理函数
                        var buffer = evt.target.result;
                        //读取int                        
                        var dv = new DataView(buffer);
                        var a5 = dv.getInt32(0);
                        //读取string
                        var enc = new TextDecoder();
                        var abc = enc.decode(buffer);
                        alert("获得字符串 " + abc);
                        document.getElementById("demo").innerHTML = abc;
                    }
                }
                else {
                    alert("Problem retrieving XML data:" + xmlhttpbinary.statusText);
                }
            }
        }

注释,转int时用DataView.getInt32()函数,注意用C#转int至byte[]的顺序与getInt32()函数的顺序相反。87,100,0,0   0,0,100,87,需要注意下。C#写二进制文件时,结尾会有3个byte的莫名字符,decode()的时候需要将这3个字符去掉。

 

ajax接收二进制文件并转化成int,string等

标签:slice   tar   target   class   tde   tin   pen   abc   innerhtml   

原文地址:https://www.cnblogs.com/bwzydr/p/8432215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!