Как я могу проверить существование файла с JavaScript? - PullRequest
2 голосов
/ 01 ноября 2009

Как я могу проверить существование файла (это XML-файл, который я хотел бы проверить в этом случае) с помощью JavaScript?

Ответы [ 4 ]

5 голосов
/ 01 ноября 2009

если вы используете jQuery, вы можете попробовать загрузить файл

$.ajax({
  type: "GET",
  url: "/some.xml",
  success: function()
  { /** found! **/},
  error: function(xhr, status, error) {
    if(xhr.status==404)
      { /** not found! **/}
  }
});

если вы не используете jQuery:

function ajaxRequest(){
 var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] 
 //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
 if (window.ActiveXObject){ 
  for (var i=0; i<activexmodes.length; i++){
   try{
    return new ActiveXObject(activexmodes[i])
   }
   catch(e){
    //suppress error
   }
  }
 }
 else if (window.XMLHttpRequest) // if Mozilla, Safari etc
  return new XMLHttpRequest()
 else
  return false
}

var myrequest=new ajaxRequest()
myrequest.onreadystatechange=function(){
 if (myrequest.readyState==4){ //if request has completed
  if (myrequest.status==200 || window.location.href.indexOf("http")==-1){ 
    // FOUND!
  }
 }
}

myrequest.open('GET', 'http://blabla.com/somefile.xml', true); 
4 голосов
/ 01 ноября 2009

Если файл расположен на том же хосте, который обслуживал страницу, содержащую javascript, вы можете попробовать отправить запрос ajax и проверить возвращенный код состояния:

function checkFile(fileUrl) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }

    self.xmlHttpReq.open('HEAD', fileUrl, true);
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            if (self.xmlHttpReq.status == 200) {
                alert('the file exists');
            } else if (self.xmlHttpReq.status == 404) {
                alert('the file does not exist');
            }
        }
    }
    self.xmlHttpReq.send();
}

checkFile('/somefile.xml');
0 голосов
/ 06 апреля 2016

У меня недостаточно репутации, чтобы оставлять комментарии, поэтому позвольте мне отметить, что в ответе Анвара Чандры (не-jQuery-версия) вам в конце концов придется позвонить:

myrequest.send();

Кроме того, метод HEAD был бы лучше "проверить наличие файла", потому что вам не нужно читать весь файл с сервера.

0 голосов
/ 01 ноября 2009

Javascript на самом деле не имеет никаких функций обработки файлов. Лучше всего сделать проверку на стороне сервера и отправить клиенту некоторый контекст.

Если вы хотите стать супер хакером, вы МОЖЕТЕ вызвать xmlHttpRequest (Если вы используете jQuery, взгляните на функцию $.ajax)

После вызова $ .ajax вы можете использовать обработчики успеха / ошибок, чтобы определить, что делать. Если файл не существует, он должен выдать ошибку.

Это, конечно, НЕ рекомендуемый способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...