【发布时间】:2015-02-11 11:28:49
【问题描述】:
我碰巧在我的应用程序中注意到,当调用 datatables/tabletools 时,copy_csv_xls_pdf.swf 被调用了 3 次。我整理了a jsfiddle which (sometimes) illustrates the issue:
从TableTools documentation 可以观察到相同的行为:
这种行为特别成问题,因为文件的初始加载似乎没有被浏览器缓存,以便在同一请求期间后续加载。 p>
对于每个由 SWF “驱动”的按钮,似乎都有一个对该文件的请求。
不过,为什么这个文件会被多次加载?有必要吗?如何防止它(同时仍然提供相同的功能)?
忽略下面不必要的代码......
...这只是为了让我可以包含指向 jsfiddle 的链接:
$('#browser_data').dataTable({
"bPaginate": false,
"bAutoWidth": false,
"bLengthChange": false,
"sDom": "<'row-fluid'<'span6'f><'span6'<'pull-right'T>>r>t",
"oTableTools": {
"aButtons": [ "copy", "xls", "pdf" ],
"sSwfPath": "http://datatables.net/release-datatables/extras/TableTools/media/swf/copy_csv_xls_pdf.swf"
}
});
【问题讨论】:
-
仅供参考:在github.com/DataTables/TableTools/issues/72 上将其作为 tabletools 问题交叉发布
-
HTTP 状态码 304 表示
Not modified。所以 SWF 文件是从缓存中加载的。 > 304 Not Modified > > 表示资源自请求头 If-Modified-Since 或 If-None-Match 指定的版本以来没有被修改过。这意味着不需要重新传输资源,因为客户端仍然有一个先前下载的副本。来源:en.wikipedia.org/wiki/List_of_HTTP_status_codes jsfiddle 中似乎没有加载 swf。 -
@jao:您对官方文档和 304 状态是正确的——这确实表明文件已缓存(因此这可能只是文件头上的服务器设置)。不过,我不知道为什么需要在同一个请求中多次将同一个文件加载到浏览器。 jsFiddle 有时会显示文件加载,有时不会。但这将是一个单独的问题......
-
可能是其他人在 GitHub 上所说的,它正在为每个按钮加载......虽然很奇怪
-
我也这么认为——但为什么呢?我无法想象为什么它是必要的。
标签: jquery flash datatables jquery-datatables tabletools