Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 通过ajax-angularJS从本地目录解析gz文件中的json_Javascript_Angularjs_Ajax_Gzip - Fatal编程技术网

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

Javascript 通过ajax-angularJS从本地目录解析gz文件中的json,javascript,angularjs,ajax,gzip,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 });

我试图使用angularJS的$http服务读取data.gz中的json。但我只得到奇怪的符号和字符作为回应。我目前正在nodeJS服务器上本地运行该应用程序。我是不是遗漏了什么

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

由于文件位于本地目录中,因此将头设置为以下会导致错误:拒绝设置不安全的头“接受编码”


尝试访问本地gz文件不会提供
内容编码
头,这是浏览器解压缩文件所必需的

这一点在之前的帖子中得到了证实->

如果需要在生产中使用js文件,您应该尝试使用合适的文件服务器(如nginx或apache)来提供文件。 否则,如果是一次性脚本,你应该考虑使用,它提供了<代码> -g>代码>选项,为文件的GZIP版本提供服务。例如,如果您的文件是
systemRes.10.json.gz
,则通过在文件夹中启动
httpserver
,使用

$ npm i http-server
$ node_modules/.bin/http-server -g
您可以编写以下js脚本(使用fetch,但是$http行为应该相同)


我对它进行了测试,它提供了
内容编码
标题,因此您应该能够很好地进行测试。

控制台方法中是否有类似的错误?@SachilaRanawaka noerrors@JordanQuagliatini有点但没有errors@haribalaji,根据我链接的答案,如果您试图访问本地文件,您将缺少
内容编码
标题,这将阻止浏览器解压缩文件。实际上,我试图在Chrome上使用
获取
,但它阻止了我这么做。解决方案可能来自为您的文件提供服务并提供文件头。我尝试过,但服务器仍然不提供内容编码头。但是它提供了内容类型:application/gzip。如果您试图直接获取gz文件,它确实提供了
内容类型:application/gzip
,但是如果您不获取gz文件,而是获取没有gz的文件名(如我的回答中所述),那么它应该可以工作。即尝试
fetch('http://localhost:8080/filename)
而不是
fetch('http://localhost:8080/filename.gz“)
,http服务器的
-g
选项处理@Jordan运行的it。如果存档名称和其中存在的文件不同怎么办?假设systemRes.10.gz包含data.json。浏览器不关心文件的原始名称,只关心对其重要的数据。如果gz文件包含格式良好的JSON数据,那么使用
JSON.parse
response.JSON
将使您能够完全访问JSON数据。通常,现代web服务器gzip会在将内容发送到客户端之前自动生成内容,您不必手动完成,这就是为什么您不能用JS解压文件的原因。这很有意义@乔丹·夸利亚蒂尼
$ npm i http-server
$ node_modules/.bin/http-server -g
fetch('http://localhost:8080/systemRes.10.json')
  .then(resp => resp.json())
  .then(json => console.log(json))
  .catch(e => console.error(e))