通过ajax从本地目录解析gz文件中的json - angularJS

时间:2017-09-18 13:38:55

标签: javascript angularjs ajax gzip

我正在尝试使用angularJS的$ http服务读取data.gz中的json。但我只是将奇怪的符号和字符作为回应。我目前在nodeJS服务器中本地运行应用程序。我在这里错过了什么吗?

$http({ 
  url: 'systemRes.10.gz',
  method: 'GET'
})
.then(function successCallback(response) {
  console.log(response.data); //shows strange characters
});

Click to view the strange characters.

由于该文件位于本地目录中,因此将标题设置为以下内容会导致错误:拒绝设置不安全的标题"接受编码"

headers: { 'Accept-Encoding': 'gzip' }

1 个答案:

答案 0 :(得分:0)

尝试访问本地gz文件不会提供Content-Encoding标头,浏览器必须解压缩该文件。

这是前一篇文章所证实的 - > Angular gunzip json file automatically : Refused to set unsafe header "Accept-Encoding"

如果您需要在生产中使用js文件,您应该尝试使用适当的文件服务器(如nginx或apache)来提供文件。 否则,如果是一次性脚本,则应考虑使用提供-g选项的http-server,为您提供该文件的gzip压缩版本。例如,如果您的文件是systemRes.10.json.gz,那么请使用

在您的文件夹中启动http-server
$ npm i http-server
$ node_modules/.bin/http-server -g

您可以编写以下js脚本(使用fetch,但$ http行为应该相同)

fetch('http://localhost:8080/systemRes.10.json')
  .then(resp => resp.json())
  .then(json => console.log(json))
  .catch(e => console.error(e))

我测试了它并提供了Content-Encoding标题,所以你应该对你的测试有好处。