Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 当响应类型为arraybuffer时,如何从HTTP get方法读取Angular JS中的原始JSON?_Javascript_Angularjs_Json_Spring Rest - Fatal编程技术网

Javascript 当响应类型为arraybuffer时,如何从HTTP get方法读取Angular JS中的原始JSON?

Javascript 当响应类型为arraybuffer时,如何从HTTP get方法读取Angular JS中的原始JSON?,javascript,angularjs,json,spring-rest,Javascript,Angularjs,Json,Spring Rest,我正在尝试阅读ByteArray,以便使用 method : 'GET' url : '', cache : isCache||false, responseType: 'arraybuffer' 当一切正常时,这工作正常 但当我抛出一个带有正确JSON的异常并将HTTP状态标记为错误请求时,即使在将config更改为respone.config.responseType='application/JSON'之后,我也无法读取JSON响应 它在response.data

我正在尝试阅读ByteArray,以便使用

 method : 'GET'
 url        : '',
 cache  : isCache||false,
 responseType: 'arraybuffer'
当一切正常时,这工作正常

但当我抛出一个带有正确JSON的异常并将HTTP状态标记为错误请求时,即使在将config更改为respone.config.responseType='application/JSON'之后,我也无法读取JSON响应

它在response.data上只显示空的
ArrayBuffer{}

但重要的是,我可以在GoogleChrome开发者工具请求中看到JSON响应

我在谷歌上搜索了堆栈溢出,但没找到多少

后面添加的行下方

我正在添加从chrome网络连接接收到的响应对象图片和数据

第一幅图:angular JS的错误函数的响应对象

第二个映像-服务器返回正确的JSON消息

第三个图像-请求和响应头图片


我面临的唯一问题是无法读取响应数据,因为我将响应类型设置为arraybuffer

如果响应类型为
arraybuffer
,要查看它,您应该将其转换为blob并从该blob创建objectUrl,然后下载它或在新选项卡/浏览器窗口中打开以查看它

Js:


与其一直期待
arraybuffer
为什么不期待
application/json
,不如在返回本应创建pdf的数据时,对数据进行base64排序,将其放入json对象并返回给客户端

即使抛出异常,您仍然希望看到
JSON
。服务器端的响应可能类似于:

{
    responseCode: // your response code according to whether the request is success or not,
    responseMessage: // success or fail
    data: // your base64 encoded pdf data(the data that if the request is successful will be returned), note it will be returned as a normal string
} // I'm hoping you know how to base64 encode data
然后在客户端(Javascript)中,执行if

if(data.responseCode == //errorCode) {
    alert(data.responseMessage);
} else {
    // Unpack data
    var myPdfData = // base64 decode(data.data)
    // Do logic to create and open/download file
}

你甚至不需要解码数据,你只要,然后从blob

我就可以下载或查看PDF,问题是当我通过一些异常消息而不是发送二进制数据时。我想显示JSON的正常文本而不是二进制文本,因为我想在屏幕上向最终用户显示错误。请检查我添加了一些图片以便更好地理解。如果你的API在收到400错误的请求响应时返回JSON,那么我上面的代码应该可以工作,并显示来自服务器的错误消息。它正在调用错误函数,但是响应是空的,就像arraybuffer{},但是在您的图像中,您接收到的是json吗?如果在出现问题时从服务器获取arraybuffer,则不能将其作为json读取,因为它不是json。如果您控制服务器端代码,我建议您将响应更改为包含两个属性的对象,如:
{file:theArrayBuffer,message:“发生错误时的消息”}
。然后,如果arrayBuffer为null,则显示消息。我接受您的答案,因为它提供了另一种方法,可以将base 64格式的二进制数据从后端传递到前端,而不需要数组缓冲区。在该帖子中找到正确答案的副本
if(data.responseCode == //errorCode) {
    alert(data.responseMessage);
} else {
    // Unpack data
    var myPdfData = // base64 decode(data.data)
    // Do logic to create and open/download file
}