$ ajax,从服务器加载文件json.gz而不启用压缩,如何设置标头?

时间:2013-10-11 00:19:30

标签: jquery ajax json gzip

我的第一篇文章:)

我收到了json文件' my_data.json'。它大约3 MB。我加载它:

$(document).ready(function() {
$.ajax({
    'url' : 'my_data.json',
    dataType: 'json',
    success: function(json){

一切正常,脚本从文件中获取数据,我可以从中构建一个列表。

因为我希望使用压缩文件的大小,但我的托管服务提供商已禁用mod_gzip和mod_deflate。所以我使用PHP gzencode压缩文件,现在文件只有250kB。新文件是' my_data.json.gz'。

当我更换" my_data.json"用" my_data.json.gz"在以前的代码中,没有任何事情发生据我所知,我应该通知浏览器有关压缩数据的信息。我阅读了有关标题并尝试添加:

beforeSend: function (xhr){ 
        xhr.setRequestHeader("Content-Encoding","gzip");
    }, 

headers: {"Content-Encoding": "gzip"},
行后

dataType: 'json',

但没有任何事情发生。

我做错了什么?我应该在什么文件中设置什么?

请指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

我从我的托管服务提供商那里得到了答案,而且效果很好。 对于任何需要这个的人: .htaccess文件应该是这样的:

AddEncoding gzip gz
<FilesMatch "\.gz$">
ForceType text/plain
Header set Content-Encoding: gzip
</FilesMatch>

就是这样。

但是如果你想使用PHP发送文件而不是.htaccess更改,请创建新文件'senddata.php'并将其放入:

<?php $file = 'testowe-dane.json.gz';
if (file_exists($file))
{ header( "Content-Encoding: gzip" );
ob_clean();
flush();
readfile($file);
exit; }
?>

然后从这个php文件加载数据: $.ajax({ 'url' : 'senddata.php', dataType: 'json', success: function(json) ......等等