Yanıtlar:
JQuery ile:
$.ajax({
url:'http://www.example.com/somefile.ext',
type:'HEAD',
error: function()
{
//file not exists
},
success: function()
{
//file exists
}
});
DÜZENLE:
İşte jQuery kullanmadan 404 durumunu kontrol etmek için kod
function UrlExists(url)
{
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
Küçük değişiklikler yapar ve bunun yerine durum HTTP durum kodu 200'ü (başarılı) kontrol edebilir.
DÜZENLEME 2: XMLHttpRequest eşitlemesi onaylanmadığından, zaman uyumsuz yapmak için şöyle bir yardımcı program yöntemi ekleyebilirsiniz:
function executeIfFileExist(src, callback) {
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (this.readyState === this.DONE) {
callback()
}
}
xhr.open('HEAD', src)
}
Benzer ve daha güncel bir yaklaşım.
$.get(url)
.done(function() {
// exists code
}).fail(function() {
// not exists code
})
$.ajax
daha geriye dönük uyumluysa daha iyi görünüyor, değil mi?
Bu benim için çalışıyor:
function ImageExist(url)
{
var img = new Image();
img.src = url;
return img.height != 0;
}
alternatif resim eklemek için bu komut dosyasını kullandım
function imgError()
{
alert('The image could not be loaded.');
}
HTML:
<img src="image.gif" onerror="imgError()" />
Aynı etki alanındaki dosyaları test ettiğiniz sürece bunun çalışması gerekir:
function fileExists(url) {
if(url){
var req = new XMLHttpRequest();
req.open('GET', url, false);
req.send();
return req.status==200;
} else {
return false;
}
}
Bu örnekte, başlıkların alınmasının yanı sıra (dosyanın var olduğu hava durumunu kontrol etmek için ihtiyacınız olan tek şey) tüm dosyayı alan bir GET isteği kullanılıyor. Dosya yeterince büyükse, bu yöntemin tamamlanması biraz zaman alabilir.
Bunu yapmanın iyi bir yolu bu hattı değiştirerek olacaktır: req.open('GET', url, false);
içinreq.open('HEAD', url, false);
async: false
, Firefox sürüm 30.0 ve sonraki sürümlerde ve Chrome'un son / geçerli sürümlerinde senkronize işlem, olumsuz kullanıcı deneyimi nedeniyle kullanımdan kaldırılmıştır. Kullanılmaya çalışıldığında hata / hata oluşur. async: true
Asenkron çalışma için geri arama fonksiyonu ile kullanılmalıdır .
Bu sorunun cevabını çalıştırmaya çalıştığımda bir etki alanları arası izin sorunu alıyordum:
function UrlExists(url) {
$('<img src="'+ url +'">').load(function() {
return true;
}).bind('error', function() {
return false;
});
}
Harika çalışıyor gibi görünüyor, umarım bu birine yardımcı olur!
Babel transpiler veya Typescript 2 kullanıyorsanız ES7'nin nasıl yapılacağı aşağıda açıklanmıştır:
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;
}
}
Daha sonra diğer async
kapsamınızın içinde, URL'nin var olup olmadığını kolayca kontrol edebilirsiniz:
const isValidUrl = await isUrlFound('http://www.example.com/somefile.ext');
console.log(isValidUrl); // true || false
Bir dosya olup olmadığını kontrol etmek için bu komut dosyasını kullanın (ayrıca çapraz kökenli sorunu ele alır):
$.ajax(url, {
method: 'GET',
dataType: 'jsonp'
})
.done(function(response) {
// exists code
}).fail(function(response) {
// doesnt exist
})
Denetlenmekte olan dosya JSON içermiyorsa aşağıdaki sözdizimi hatasının atılacağını unutmayın.
Yakalanmayan Sözdizimi Hatası: Beklenmeyen simge <
Dosyanın var olup olmadığını görmek için zaman uyumsuz çağrı daha iyi bir yaklaşımdır, çünkü sunucudan bir yanıt bekleyerek kullanıcı deneyimini bozmaz. .open
Üçüncü parametre false değerine ayarlanmış olarak bir çağrı yaparsanız (örneğin, birçok örnekte olduğu gibi http.open('HEAD', url, false);
), bu senkronize bir çağrıdır ve tarayıcı konsolunda bir uyarı alırsınız.
Daha iyi bir yaklaşım:
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 );
}
}
Kaynak: https://xhr.spec.whatwg.org/
.open
için üçüncü parametre seti ile aramayı deneyin true
, bunun gibi client.open("HEAD", address, true);
@Pierre
İstemci bir bilgisayar için bu aşağıdakilerle gerçekleştirilebilir:
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")
}
Bu, bir dosyayı belirli bir konuma aktarmak için kullanılan programım ve yoksa uyarı gösteriyor
Bir dosyanın var olup olmadığını kontrol etmek için JavaScript işlevi:
function doesFileExist(urlToFile)
{
var xhr = new XMLHttpRequest();
xhr.open('HEAD', urlToFile, false);
xhr.send();
if (xhr.status == "404") {
console.log("File doesn't exist");
return false;
} else {
console.log("File exists");
return true;
}
}
Önce işlevi oluşturur
$.UrlExists = function(url) {
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
Fonksiyonu aşağıdaki gibi kullandıktan sonra
if($.UrlExists("urlimg")){
foto = "img1.jpg";
}else{
foto = "img2.jpg";
}
$('<img>').attr('src',foto);
Bu, kabul edilen cevaba bir uyarlamadır, ancak cevaptan ihtiyacım olanı alamadım ve bunu bir önsöz gibi çalıştığını test etmek zorunda kaldım, bu yüzden çözümümü buraya koyuyorum.
Yerel bir dosyanın var olduğunu doğrulamamız ve yalnızca dosyanın (PDF) varsa açılmasına izin vermemiz gerekiyordu. Web sitesinin URL'sini atlarsanız, tarayıcı otomatik olarak ana bilgisayar adını belirler ve yerel ana bilgisayarda ve sunucuda çalışmasını sağlar:
$.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");
}
});
Yapmanız gereken, kontrolü gerçekleştirmesi için sunucuya bir istek göndermek ve ardından sonucu size geri göndermektir.
Ne tür bir sunucuyla iletişim kurmaya çalışıyorsunuz? İsteği yanıtlamak için küçük bir hizmet yazmanız gerekebilir.
Bu OP'nin sorusunu ele almaz, ancak bir veritabanından sonuç döndüren herkes için: İşte kullandığım basit bir yöntem.
Kullanıcı bir avatar yüklemediyse avatar
alan olur NULL
, bu yüzden dizinden varsayılan bir avatar resmi img
eklerdim.
function getAvatar(avatar) {
if(avatar == null) {
return '/img/avatar.jpg';
} else {
return '/avi/' + avatar;
}
}
sonra
<img src="' + getAvatar(data.user.avatar) + '" alt="">
Boole döndürecek bir işlev istedim, kapanma ve asenkroniklik ile ilgili sorunlarla karşılaştım. Bu şekilde çözdüm:
checkFileExistence= function (file){
result=false;
jQuery.ajaxSetup({async:false});
$.get(file)
.done(function() {
result=true;
})
.fail(function() {
result=false;
})
jQuery.ajaxSetup({async:true});
return(result);
},
OnReadyStateChange
, HTTP_STATUS'u kontrol etmeden önce bağlayıcı olay olmalısınız.