Javascript是否可以在Http请求之前检查文件是否存在?
我使用简单的AJAX和google调试,然后发现url不存在 代码非常简单:Javascript是否可以在Http请求之前检查文件是否存在?,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我使用简单的AJAX和google调试,然后发现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://'
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如何)
如图所示:
我该怎么办
我发现的错误方向是否存在误导?尝试此功能
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方法与GET相同,只是服务器不能
在响应中返回消息正文。包含的元信息
在HTTP中,响应头请求的头应该相同
响应GET请求而发送的信息。这种方法可以
用于获取由
请求而不传输实体体本身。这种方法是可行的
通常用于测试超文本链接的有效性、可访问性、,
以及最近的修改
阅读有关头部的信息您可以使用此功能
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;
}
您是在本地硬盘上尝试上述示例,还是该页面托管在服务器上并通过http协议运行。如果示例是从文件:///协议运行的,那么您将不会获得readyState,因为它在Linux服务器中,谢谢。我使用了此解决方案,但我建议在try-catch之间包含“http.send()”,以检查url是否不存在(我使用了一个文件,当文件不在作为参数传递的目录中时,我得到了一个javascript错误)
async:false
,Firefox版本30.0及更高版本以及最近/当前版本的Chrome中的同步操作因用户体验不佳而被弃用。尝试使用会导致失败/错误。应使用带有回调函数的async:true
进行异步操作。async:false
,Firefox 30.0及更高版本以及Chrome的最新/当前版本中的同步操作因用户体验不佳而被弃用。尝试使用会导致失败/错误。对于异步操作,应使用带回调函数的async:true
。