Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery和jDataView读取IE9中的二进制文件_Javascript_Jquery_Binary_Internet Explorer 9 - Fatal编程技术网

Javascript 使用jQuery和jDataView读取IE9中的二进制文件

Javascript 使用jQuery和jDataView读取IE9中的二进制文件,javascript,jquery,binary,internet-explorer-9,Javascript,Jquery,Binary,Internet Explorer 9,我正在尝试在两种浏览器上读取二进制文件:Chrome和IE9 我在ajax请求之前添加了新类型binary(使用jQuery 1.10.0): 对于返回二进制流的服务器,我添加了标头: <?php header("Content-type: text/html; charset=windows-1251"); ?> 我正在使用方法getUint8()获取二进制流的一部分: for (var l = 0; l < 8; l++) { tx += " " + view.g

我正在尝试在两种浏览器上读取二进制文件:Chrome和IE9

我在ajax请求之前添加了新类型
binary
(使用jQuery 1.10.0):

对于返回二进制流的服务器,我添加了标头:

<?php header("Content-type: text/html; charset=windows-1251"); ?>
我正在使用方法
getUint8()
获取二进制流的一部分:

for (var l = 0; l < 8; l++) {
    tx += " " + view.getUint8(l, true);
}

使用Chrome它工作得很好,但我在IE9上没有相同的结果。。。Chrome使用的是原生的
getUint8
函数,而IE9使用的是jDataView方法。

最后,我找到了一个使用这个和jDataView的解决方案:

var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";

if (oReq.overrideMimeType) {
    oReq.overrideMimeType('text/plain; charset=x-user-defined');
} else {
    oReq.setRequestHeader('Accept-Charset', 'x-user-defined');
}

oReq.onload = function(oEvent) {
    if (oReq.status == 200) {
        var arrayBuffer = oReq.response;
        var view = new Uint8Array(arrayBuffer);
        var dataView = new jDataView(view.buffer);
        // ...
    }
};
检查两件事:1)你的
for
循环在每次迭代中都有相同的
l
值。如果是这样,就没有足够的代码来解释原因;2) 当您从两个浏览器获得响应时,服务器响应是相等的。如果是这样,jDataView的getUint8方法出现问题;github在问题选项卡上有类似bugtracker的东西,在那里报告。
for (var l = 0; l < 8; l++) {
    tx += " " + view.getUint8(l, true);
}
0 0 0 7 12 106 212 65 (chrome) => GOOD (match the expected results)
0 0 2 94 12 106 36 65 (IE9) => 3 BAD sequences
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";

if (oReq.overrideMimeType) {
    oReq.overrideMimeType('text/plain; charset=x-user-defined');
} else {
    oReq.setRequestHeader('Accept-Charset', 'x-user-defined');
}

oReq.onload = function(oEvent) {
    if (oReq.status == 200) {
        var arrayBuffer = oReq.response;
        var view = new Uint8Array(arrayBuffer);
        var dataView = new jDataView(view.buffer);
        // ...
    }
};