JavaScript 获取文件最后修改日期的函数无输出问题
无输出问题排查
按代码执行顺序,问题点如下:
- 变量名大小写不匹配的致命语法错误
JavaScript 是大小写敏感的语言,send()函数内部声明的请求实例变量名为xhttp,但后续调用open、send方法时全部误写为xmlhttp,代码执行到该行会直接触发ReferenceError,整个脚本运行中断,根本走不到后续的alert逻辑,自然没有任何输出。 - 文件时间取值逻辑错误
即使修正了变量名,原代码从xmlDoc.lastModified读取修改时间的逻辑也不成立:responseXML是浏览器将返回文本解析后生成的DOM Document对象,这里读取到的lastModified实际是当前加载的HTML页面的修改时间,和请求的file.xml完全无关。要获取目标文件的最后修改时间,必须通过XMLHttpRequest实例的getResponseHeader方法,读取HTTP响应头里的Last-Modified字段值。 - 同步请求的兼容限制
原代码给open方法传第三个参数false开启同步XHR请求,现代浏览器出于性能考虑,会对主线程的同步XHR做拦截或警告,部分场景下会直接阻断请求流程,导致逻辑无法正常执行。
修正后的可运行代码
function send() { const xhttp = new XMLHttpRequest(); // 改为异步请求模式,规避主线程同步请求的拦截限制 xhttp.open("GET", "file.xml", true); // 绑定请求完成的回调,在请求成功返回后执行后续逻辑 xhttp.onload = function() { myfunction(xhttp); }; xhttp.send(); } function myfunction(xhr) { // 从HTTP响应头读取目标文件的最后修改时间 const fileLastModified = xhr.getResponseHeader("Last-Modified"); alert(fileLastModified); }
注意:如果部署在本地文件系统(file://协议)下测试,部分浏览器不会返回静态文件的Last-Modified响应头,需要将代码部署在HTTP服务(本地静态服务器即可)环境下测试。
内容的提问来源于stack exchange,提问作者sonia
相关产品推荐
相关产品推荐

