2016-05-23 183 views
0

任何人都可以帮助我吗?检索二进制数据

我有一个简单的测试的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调用这个Java servlet?

举例来说,我试过如下:

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,我希望的那样)。

感谢您的任何帮助。

至于建议我尝试以下方法,但我得到了相同的结果:(

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

             OnCallCompleted("1,-1,0,0,-1,1"); 
            } 
           } 
          } 
         }*/ 

         ajaxRequestObject.send(szParams); 
        } 

} 

我仍然可以看到19,而不是80

+0

'arrayBuffer.byteLength'给你什么? – Musa

+0

它给了我19,但我期待80 – user3738290

回答

0

您正在尝试发送的请求主体的参数,因为它是一个GET reque st他们应该在url中

ajaxRequestObject.open("GET", szURL+'?'+szParams, true); 
+0

非常感谢。就是这样。它现在完美。 – user3738290