zoukankan      html  css  js  c++  java
  • ajax接收二进制文件并转化成int,string等

    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个字符去掉。

  • 相关阅读:
    nginx反向代理、让代理节点记录客户端真实IP
    Nginx反向代理多虚拟主机代理
    Nginx负载均衡
    Python装饰器笔记
    Python多线程学习笔记
    Python+Bottle+Sina SAE快速构建网站
    Python中使用ElementTree解析xml
    [转]浅谈Python web框架
    Python数据库连接池实例——PooledDB
    了解HTML的代码注释
  • 原文地址:https://www.cnblogs.com/bwzydr/p/8432215.html
Copyright © 2011-2022 走看看