Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检索二进制数据_Javascript_Ajax - Fatal编程技术网

Javascript 检索二进制数据

Javascript 检索二进制数据,javascript,ajax,Javascript,Ajax,有人能帮我吗 我有一个简单的测试Java servlet,如下所示: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte[] bytes = ReadWaveformAsBinary(); response.setContentType("applic

有人能帮我吗

我有一个简单的测试Java servlet,如下所示:

    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);