2016-02-18 25 views
0

我有一个网页,我需要检查文件是否存在,它们在文件大小和文件类型上有所不同,我有下面的代码工作,但对于较大的文件可能需要很长时间(其中一人花了30秒)返回结果。我想知道的是有一个更好的方法,如果这是一个对话会看起来像:检查大尺寸文件是否存在很快javascript

“你在那里文件?

“是的,我在这里,上周日我は...”

“雅,雅,雅你有嘘”

function fileExists(url) { 
    if(url){ 
     var req = new XMLHttpRequest() 
     req.open('GET', url, false) 
     req.send() 
     return req.status==200 
    } else { 
     return false 
    } 
} 

因此,任何人知道这不更好的办法必须加载尽可能多的文件,或者一旦知道文件在那里就可以取消加载。

+2

您已经尝试了'HEAD'要求? –

回答

1

尝试HEAD要求:

function fileExists(url, callback) { 
    if(url){ 
     var req = new XMLHttpRequest(); 
     req.addEventListener('readystatechange', function(e) { 
      if (this.readyState === 4) { 
       callback(this.status !== 404); 
      } 
     }); 
     req.open('HEAD', url, false); 
    } else { 
     callback(false); 
    } 
} 

但是,你必须使用一个回调函数,因为它是一个异步请求

+0

对不起有几百万件事情要做,最近几天我在试着写代码,出于某种原因(相信支持已被删除)'req.onreadystatechange = function(){'不会触发任何想法? – Fructus

+0

我改变了我的答案,也许这会对你有用:) – PierreDuc

+0

它应该工作正常,找出它为什么不是,它总是返回readyState 1 ...不知道为什么有问题的文件在那里。让谷歌机器让我看看我能弄清楚到底发生了什么。 – Fructus