Как получить двоичные данные с помощью AJAX
Привет,
Может ли кто-нибудь помочь мне в следующем?
У меня есть очень простой тестовый Java сервлет следующим образом:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte[] bytes = GetNumbers1to10AsBinaryDataFromAFile() // My function to get bytes of {1,2,3,4,5,6,7,8,9,10} written as doubles to a binary file. response.setContentType("application/octet-stream"); response.setContentLength(bytes.length); ServletOutputStream servletOutputStream = response.getOutputStream(); servletOutputStream.write(bytes, 0, bytes.length); servletOutputStream.flush(); servletOutputStream.close(); }
Это прекрасно работает. Я знаю это, потому что я вызываю его из приложения C#, как показано ниже:
public static bool CallWebServiceDownloadEndPoint(string szWebEndPoint, string szRequest, out double[] data) { data = null; bool bSuccess = true; WebClient webClient = new WebClient(); try { byte[] byteData = webClient.DownloadData(szWebEndPoint + "?" + szRequest); Array.Reverse(byteData); data = CreateDoubleArrayFromByteArray(byteData); Array.Reverse(data); } catch { bSuccess = false; } return bSuccess; }
Работать отлично. Я получаю 80 байт данных, как и ожидалось (8 * 10 двойников), и цифры такие, какими они должны быть.
Моя проблема в том, как я могу вызвать это с помощью AJAX из javascript?
У меня есть следующее:
function AJAXSendString2(ajaxRequestObject, szURL, szParams, OnCallCompleted) { if (ajaxRequestObject != null) { ajaxRequestObject.open("GET", szURL, true); ajaxRequestObject.responseType = "arraybuffer"; ajaxRequestObject.onload = function(oEvent) { var arrayBuffer = ajaxRequestObject.response; if(arrayBuffer) { var byteArray = new Uint8Array(arrayBuffer); alert(byteArray.byteLength); } } /*ajaxRequestObject.onreadystatechange = function () { if (ajaxRequestObject.readyState == 4) { if (ajaxRequestObject.status == 200) { var arrayBuffer = ajaxRequestObject.response; if(arrayBuffer) { var byteArray = new Uint8Array(arrayBuffer); alert(byteArray.byteLength); } } } }*/ ajaxRequestObject.send(szParams); } }
Не имеет значения, использую ли я раскомментированный код или комментированный код. Результат оповещения-19, а я ожидаю 80. Я делаю что-то не так?
Наконец, если я когда-нибудь заставлю его работать, как я могу использовать javascript для преобразования bytearray в Double? (плавает?).
Спасибо за любую помощь,
Митч.
Что я уже пробовал:
Как показано выше. Я протестировал сервлет из c# и попробовал два разных способа вызвать его в JavaScript. Оба дают мне byteArray. byteLength os 19, а не 80.
ZurdoDev
Что вы будете делать с байтовыми данными в JavaScript?