Может кто-нибудь предложить какие-либо советы, пожалуйста?IE и javascript и двоичные данные
У меня есть очень простой ServerSide 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);
и отправить, что и на обратный вызов просто обрабатывать его как массив, то все хорошо на все браузеры, но я хочу смешивать типы данных).
Спасибо за любые мысли, Mitch.