답변:
jQuery로 :
$.ajax({
url:'http://www.example.com/somefile.ext',
type:'HEAD',
error: function()
{
//file not exists
},
success: function()
{
//file exists
}
});
편집하다:
다음은 jQuery를 사용하지 않고 404 상태를 확인하는 코드입니다.
function UrlExists(url)
{
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
작은 변경으로 대신 HTTP 상태 코드 200 (성공) 상태를 확인할 수 있습니다.
편집 2 : 동기화 XMLHttpRequest는 더 이상 사용되지 않으므로 다음과 같은 유틸리티 메소드를 추가하여 비 동기화 할 수 있습니다.
function executeIfFileExist(src, callback) {
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (this.readyState === this.DONE) {
callback()
}
}
xhr.open('HEAD', src)
}
비슷하고 더 최신의 접근법.
$.get(url)
.done(function() {
// exists code
}).fail(function() {
// not exists code
})
$.ajax이전 버전과의 호환성이 더 좋을 것 같습니다.
이것은 나를 위해 작동합니다 :
function ImageExist(url)
{
var img = new Image();
img.src = url;
return img.height != 0;
}
이 스크립트를 사용하여 대체 이미지를 추가했습니다.
function imgError()
{
alert('The image could not be loaded.');
}
HTML :
<img src="image.gif" onerror="imgError()" />
동일한 도메인 에서 파일을 테스트하는 한 작동합니다.
function fileExists(url) {
if(url){
var req = new XMLHttpRequest();
req.open('GET', url, false);
req.send();
return req.status==200;
} else {
return false;
}
}
이 예제는 GET 요청을 사용합니다. 헤더를 얻는 것 외에도 (파일이 존재하는 날씨를 확인하기 만하면) 전체 파일을 가져옵니다. 파일이 충분히 큰 경우이 방법을 완료하는 데 시간이 걸릴 수 있습니다.
이 작업을 수행하는 더 좋은 방법이 라인을 변경하는 것 : req.open('GET', url, false);에req.open('HEAD', url, false);
async: false, Firefox 버전 30.0 이상 및 최근 / 현재 버전의 Chrome에서는 동기식 작동이 좋지 않은 사용자 경험으로 인해 더 이상 사용되지 않습니다. 사용을 시도하면 실패 / 오류가 발생합니다. async: true비동기 작업을 위해 콜백 함수와 함께 사용해야 합니다.
이 질문에 대한 답변을 실행하려고 할 때 도메인 간 권한 문제가 발생하여 다음과 같이 진행했습니다.
function UrlExists(url) {
$('<img src="'+ url +'">').load(function() {
return true;
}).bind('error', function() {
return false;
});
}
그것은 잘 작동하는 것 같습니다, 이것이 누군가를 돕기를 바랍니다!
Babel 트랜스 파일러 또는 Typescript 2를 사용하는 경우 ES7 방식으로 수행하는 방법은 다음과 같습니다.
async function isUrlFound(url) {
try {
const response = await fetch(url, {
method: 'HEAD',
cache: 'no-cache'
});
return response.status === 200;
} catch(error) {
// console.log(error);
return false;
}
}
그런 다음 다른 async범위 내에서 URL이 존재하는지 쉽게 확인할 수 있습니다.
const isValidUrl = await isUrlFound('http://www.example.com/somefile.ext');
console.log(isValidUrl); // true || false
파일이 존재하는지 확인하기위한 비동기 호출은 서버로부터의 응답을 기다림으로써 사용자 경험을 저하시키지 않기 때문에 더 나은 방법입니다. .open세 번째 매개 변수를 false로 설정하여 호출하면 (예 : 위의 많은 예에서와 같이 http.open('HEAD', url, false);) 이는 동기 호출이며 브라우저 콘솔에 경고가 표시됩니다.
더 나은 접근 방식은 다음과 같습니다.
function fetchStatus( address ) {
var client = new XMLHttpRequest();
client.onload = function() {
// in case of network errors this might not give reliable results
returnStatus( this.status );
}
client.open( "HEAD", address, true );
client.send();
}
function returnStatus( status ) {
if ( status === 200 ) {
console.log( 'file exists!' );
}
else {
console.log( 'file does not exist! status: ' + status );
}
}
.open하는 세 번째 매개 변수 세트와 true확인은 다음과 같이 비동기 적으로 호출을 할 client.open("HEAD", address, true);@Pierre
클라이언트 컴퓨터의 경우 다음을 수행하면됩니다.
try
{
var myObject, f;
myObject = new ActiveXObject("Scripting.FileSystemObject");
f = myObject.GetFile("C:\\img.txt");
f.Move("E:\\jarvis\\Images\\");
}
catch(err)
{
alert("file does not exist")
}
이 파일은 특정 위치로 파일을 전송하고 존재하지 않는 경우 경고를 표시하는 프로그램입니다.
먼저 함수를 만듭니다
$.UrlExists = function(url) {
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
다음과 같이 기능을 사용한 후
if($.UrlExists("urlimg")){
foto = "img1.jpg";
}else{
foto = "img2.jpg";
}
$('<img>').attr('src',foto);
이것은 받아 들인 대답에 대한 적응이지만 대답에서 필요한 것을 얻지 못했고 직감으로 작동했는지 테스트해야하므로 솔루션을 여기에 올려 놓았습니다.
로컬 파일이 존재하는지 확인하고 파일 (PDF)이있는 경우에만 파일을 열도록 허용해야했습니다. 웹 사이트의 URL을 생략하면 브라우저가 호스트 이름을 자동으로 결정하여 localhost 및 서버에서 작동하게합니다.
$.ajax({
url: 'YourFolderOnWebsite/' + SomeDynamicVariable + '.pdf',
type: 'HEAD',
error: function () {
//file not exists
alert('PDF does not exist');
},
success: function () {
//file exists
window.open('YourFolderOnWebsite/' + SomeDynamicVariable + '.pdf', "_blank", "fullscreen=yes");
}
});
당신이해야 할 일은 확인을 수행하기 위해 서버에 요청을 보낸 다음 결과를 다시 보냅니다.
어떤 유형의 서버와 통신하려고합니까? 요청에 응답하기 위해 작은 서비스를 작성해야 할 수도 있습니다.
이것은 OP의 질문을 다루지는 않지만 데이터베이스에서 결과를 반환하는 사람에게는 다음과 같습니다. 여기 내가 사용한 간단한 방법이 있습니다.
사용자가 아바타를 업로드하지 않은 경우 avatar필드는입니다 NULL. 따라서 img디렉토리 에서 기본 아바타 이미지를 삽입합니다 .
function getAvatar(avatar) {
if(avatar == null) {
return '/img/avatar.jpg';
} else {
return '/avi/' + avatar;
}
}
그때
<img src="' + getAvatar(data.user.avatar) + '" alt="">
OnReadyStateChange에서 HTTP_STATUS를 확인하기 전에 이벤트를 바인딩해야합니다 .