Javascript 检索二进制数据
有人能帮我吗 我有一个简单的测试Java servlet,如下所示:Javascript 检索二进制数据,javascript,ajax,Javascript,Ajax,有人能帮我吗 我有一个简单的测试Java servlet,如下所示: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte[] bytes = ReadWaveformAsBinary(); response.setContentType("applic
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
byte[] bytes = ReadWaveformAsBinary();
response.setContentType("application/octet-stream");
response.setContentLength(bytes.length);
ServletOutputStream servletOutputStream = response.getOutputStream();
servletOutputStream.write(bytes, 0, bytes.length);
servletOutputStream.flush();
servletOutputStream.close();
}
这个功能有效。它返回一个字节数组,其中包含10个双精度数字。我知道它可以正常工作,因为我可以从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字节(10*8字节),10个数字都与预期相同
我的问题是,如何通过AJAX调用从JavaScript调用这个Javaservlet
例如,我尝试了以下方法:
function AJAXSendString(ajaxRequestObject, szURL, szParams, OnCallCompleted)
{
if (ajaxRequestObject != null)
{
ajaxRequestObject.open("GET", szURL, true);
ajaxRequestObject.responseType = "arraybuffer";
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)
谢谢你的帮助
根据建议,我尝试了以下方法,但得到了相同的结果:(
我仍然看到19而不是80。您应该使用本例中的“onload”事件来获得完整的负载/响应
您正试图在请求正文中发送参数,因为这是一个GET请求,它们应该在url中
ajaxRequestObject.open("GET", szURL+'?'+szParams, true);
arrayBuffer.bytellength
给了你什么?它给了我19个,但我希望80个。我还是不知道。我在最初的帖子中添加了onload代码示例。非常感谢。就是这样。它现在工作得很好。
ajaxRequestObject.open("GET", szURL+'?'+szParams, true);