gpt4 book ai didi

javascript - 使用javascript获取文件的修改时间戳

转载 作者:行者123 更新时间:2023-11-29 21:58:42 27 4
gpt4 key购买 nike

是否可以仅使用 JavaScript 获取文件的修改时间戳?

我使用 JSON 文件通过 javascript 填充页面,我想显示该 JSON 文件的时间戳。

最佳答案

如果您通过真正的 ajax(即通过 XMLHttpRequest)检索文件,则可以这样做,前提是您将服务器配置为发送 Last-Modified发送数据时的 header 。

这里的基本内容是,当您使用 XMLHttpRequest 时,您可以访问响应 header 。所以如果服务器发回Last-Modified,你可以使用它:

var xhr = $.ajax({
url: "data.json",
success: function(response) {
display("Data is " + response.data + ", last modified: " + xhr.getResponseHeader("Last-Modified"));
}
});

刚刚在 Chrome、Firefox、IE8 和 IE11 上尝试过。运行良好(即使数据来自缓存)。


您在下面说过您需要在循环中执行此操作,但您一直看到变量的最后一个值。这告诉我你做过这样的事情:

// **WRONG**
var list = /*...some list of URLs...*/;
var index;
for (index = 0; index < list.length; ++index) {
var xhr = $.ajax({
url: list[index],
success: function(response) {
display("Data is " + response.data + ", last modified: " + xhr.getResponseHeader("Last-Modified"));
}
});
}

问题是所有的 success 回调都有一个 持久引用xhr 变量,而且只有其中一个.所以所有回调都会看到分配给 xhr 的最后一个值。

这是经典的闭包问题。这是一种解决方案:

var list = /*...some list of URLs...*/;
list.forEach(function(url) {
var xhr = $.ajax({
url: url,
success: function(response) {
display("Data for " + url + " is " + response.data + ", last modified: " + xhr.getResponseHeader("Last-Modified"));
}
});
});

由于 forEach 回调的每次迭代都有自己的 xhr 变量,因此不存在串扰。 (您需要在旧浏览器上填充 forEach。)


你在下面说:

I already thought about a closure problem, thats why I used an array xhr[e] in my loop over e... But your example doesent help...

并在要点中链接到此代码:

//loop over e....
nodename=arr[e];
node_json=path_to_node_json+nodename;
html +='<a href="'+node_json+'" target="_blank" id="host_'+nodename+'">data</a></td>'
+'</tr>';
xhr[e] = $.ajax({
url: node_json,
success: function(response) {
$('#host_'+nodename).append("last modified: " + xhr[e].getResponseHeader("Last-Modified"));
}
});

这仍然存在经典错误:您的success 函数关闭变量 e,而不是 时它具有的值success 函数已创建,因此当 success 函数运行时,e 已在循环中分配给它的最后一个值。

我之前给出的 forEach 示例非常适合这个:

// (I assume `node_json`, `html`, and `path_to_node_json` are all declared
// here, outside the function.)
arr.forEach(function(nodename) {
var xhr; // <=== Local variable in this specific call to the iteration
// function, value isn't changed by subsequent iterations
node_json=path_to_node_json+nodename;
html +='<a href="'+node_json+'" target="_blank" id="host_'+nodename+'">data</a></td>'
+'</tr>';
xhr = $.ajax({
url: node_json,
success: function(response) {
// Note: You haven't used it here, but just to emphasize: If
// you used `node_json` here, it would have its value as of
// the *end* of the loop, because it's not local to this
// function. But `xhr` is local, and so it isn't changed on
// subsequent iterations.
$('#host_'+nodename).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
}
});
});

关于javascript - 使用javascript获取文件的修改时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062132/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com