Javascript是否可以在Http请求之前检查文件是否存在?

时间:2014-02-25 10:25:54

标签: javascript xmlhttprequest

我使用简单的AJAX并使用google debug然后发现该url不存在...

代码非常简单:

var http;

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
  http=new XMLHttpRequest();
} else {
  http=new ActiveXObject("Microsoft.XMLHTTP");
}

try {
  http.open("GET", 'http://'+ip+':5000/test.html', true);
  http.onreadystatechange = onRcvData;
  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    http.send(null);
  } else {// code for IE6, IE5
    http.send();
  }
} catch(e) {
  http.abort();
}

function onRcvData() {
  if (http.readyState==4) {
    if (http.status==404) {

    } else if(http.status==200) {

    } else {

    }
  }
}

如果文件test.html存在,那没关系。 当文件不存在时,错误显示在部件中:

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
  http.send(null);
} else { // code for IE6, IE5
  http.send();
}

所以,即使我使用onreadystatechange方法也无法阻止错误...

该文件位于我的网页旁边。

那么我应该怎么做才能与httprequest结合?

任何建议都表示赞赏。

添加:

我使用了方法' Head'但它返回404 ...(无论jQuery插件/ javascript)

如图: enter image description here

我该怎么做......

我发现错误的方向是否误导了?

2 个答案:

答案 0 :(得分:3)

你可以使用这个功能

function UrlExists(url)
{
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
      var http=new XMLHttpRequest();
    } 
    else {
      var http=new ActiveXObject("Microsoft.XMLHTTP");
    }

    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

<强> Reference

答案 1 :(得分:2)

尝试此功能

function urlExists(testUrl) {
    var http = jQuery.ajax({
        type:"HEAD", //Not get
        url: testUrl,
        async: false
    })
    return http.status!=404;
}


//Usage
if(!urlExists('http://www.mysite.com/somefileOrImage.ext')) {
   alert('File not found');
}

<强> HEAD

  

HEAD方法与GET相同,只是服务器不能   在响应中返回一个消息体。元信息包含   在HTTP头中响应HEAD请求应该是相同的   响应GET请求发送的信息。这种方法可以   用于获取有关该隐含的实体的元信息   请求而不转移实体主体本身。这个方法是   经常用于测试超文本链接的有效性,可访问性,   和最近的修改。

了解 head here