IE, javascript和二进制数据

IE and javascript and binary data

本文关键字:二进制 数据 javascript IE      更新时间:2023-09-26

谁能给点建议呢?

我有一个非常简单的服务器端node.js函数接收二进制数据,只是回显它:

app.post('/SetBinaryData', function(req, res)
                               {
                                    var echo = new Buffer(0);
                                    req.on('data', function (data)
                                    {
                                        echo = Buffer.concat([echo,data]);
                                    });
                                    req.on('end', function ()
                                    {
                                        res.end(echo);
                                    }); 
                               }
   );

我在客户端点击按钮时调用它,如下所示:

function OnButton3()
{
    var buffer = new ArrayBuffer(8 + 2);
    var dataview = new DataView(buffer);
    dataview.setFloat64(0, 3.4, false);
    dataview.setInt16(8, 7 , false);
    AJAXSendBinaryData(AJAXGetRequestObject(), "[URL HERE]/SetBinaryData", "args=1,2,3", dataview, OnServerBinaryCallCompleted, 9, false);
}

我的AJAX调用(包装在我的函数AJAXSendBinaryData)有以下属性:

ajaxRequestObject.open('POST', szURL, true);
ajaxRequestObject.responseType = "arraybuffer";
ajaxRequestObject.setRequestHeader('Content-Type', 'application/octet-stream');

和onload函数包含:

ajaxRequestObject.onload = function(oEvent)
{
    var arrayBuffer = ajaxRequestObject.response;
    if(arrayBuffer)
    {
        var dataView = new DataView(arrayBuffer);
        OnCallCompleted(dataView);
    }
}
OnCallCompleted方法是:
function OnServerBinaryCallCompleted(dataview)
{
    var value1 = dataview.getFloat64(0);
    var value2 = dataview.getInt16(8);
    alert(dataview.byteLength);
    alert(value1.toString() + "'n" + value2.toString());
}

这适用于Firefox, Opera, Chrome。

我看到第一个警告'10'(我发送的字节数),然后我看到消息3.4和7。

但是,在Internet Explorer 11中,我看到的不是10而是15(不管我发送了多少数据)

(注意,如果我将数据定义为:

可能会有所帮助)
var data = [253.432, 0.432, 128.654, 1.456];
var dataview = new Float64Array(data);

并发送那个,在回调中把它作为一个数组处理然后在所有浏览器上都没问题。但我想混合数据类型)。

谢谢你的建议。米奇。

解决。IE的Bug。修复发送ArrayBuffer对象到AJAX请求而不是DataView对象。现在可以在所有浏览器上运行

米奇。