谁能给点建议呢?
我有一个非常简单的服务器端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对象。现在可以在所有浏览器上运行
米奇。