开发中遇到一个非常奇怪的问题:
一个.js 文件,通过 FTP 上传到服务器,但是浏览器中获取的还是老的 .js 文件内容,换了浏览器还是一样,甚至开了虚拟机,在虚拟机里面获取那个 .js 文件,仍然是老的内容,没有更新
把这个 .js 文件换个名字,例如把 a.js 更名为 a1.js,通过浏览器就可以获取新的内容了
但是不通过浏览器,通过 ftp 下载,这个 .js 文件,又是正常的。真是奇怪了,换了很多办法都没有解决这个问题。
不知道各位有没有遇到这样的奇怪问题,究竟是怎么一回事,怎样才能更新浏览器中 的 .js 文件?

解决方案 »

  1.   

    清一下浏览器的缓存或给js加一个附加参数,像:xx.js?version=1
      

  2.   

    谢谢你的答复,给js附加参数可以让这个js更新,但是其他调用这个js的页面还是不能更新
    清理缓存没有作用,换一个浏览器都是一样的,甚至换一台电脑,下载下来的还是那个没有更新的js文件,虽然加一个参数可以暂时解决问题,但是这个js不能更新,难道要把所有调用这个js的页面后面都加上一个参数?
      

  3.   

    下载下来的还是那个没有更新的js文件,
    re:你在说你ftp失败了是吧
      

  4.   

    我从ftp上面下载下来的是更新的文件
    通过浏览器下载的就是那个没有更新的文件
      

  5.   

    哪说证明ftp失败了,你在js文件尾加个空格试试
      

  6.   

    谢谢你的答复,给js附加参数可以让这个js更新,但是其他调用这个js的页面还是不能更新
    清理缓存没有作用,换一个浏览器都是一样的,甚至换一台电脑,下载下来的还是那个没有更新的js文件,虽然加一个参数可以暂时解决问题,但是这个js不能更新,难道要把所有调用这个js的页面后面都加上一个参数?
    是的,可能是服务器针对js文件类型做了类似于GZIP的压缩和缓存了。你需要所有调用当前js的路径后都做处理,才能唯被实时更新当然,如果你一开始就预想到这个问题,那处理时并不困难
    比如。后台定义一个全局的变量ver。然后所有需要调用js时,xxx.js?ver=<%=getJsver()%>
    又比如针对不同的版本放置于不同的文件夹下,当然也是和上面一样,后台定义一个全局变量保存最新的js文件夹名称
    /base_1.001/xxx.js
    /base_1.002/xxx.js这两种方法原理相同,应用时效果相同,本人仅在需要保留历次版本时使用第二种方法
      

  7.   

    当html加载的外部文件返回304状态码时,会使用本地的缓存文件,如果你的js文件真的有改动并ftp成功后,它不会返回304,而是200