जवाबों:
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 (सफलता) के बदले जांच सकता है।
EDIT 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
, 30.0 और बाद के फ़ायरफ़ॉक्स संस्करण में तुल्यकालिक संचालन, और क्रोम के हाल के / वर्तमान संस्करणों में प्रतिकूल उपयोगकर्ता अनुभव के कारण हटा दिया गया है। असफल / त्रुटि के उपयोग के प्रयास किए गए। async: true
अतुल्यकालिक ऑपरेशन के लिए कॉलबैक फ़ंक्शन के साथ उपयोग करना चाहिए ।
इस प्रश्न के उत्तर को चलाने की कोशिश करते समय मुझे एक क्रॉस डोमेन अनुमतियां जारी हो रही थीं, इसलिए मैं इसके साथ गया:
function UrlExists(url) {
$('<img src="'+ url +'">').load(function() {
return true;
}).bind('error', function() {
return false;
});
}
यह बहुत अच्छा काम करता है, आशा है कि यह किसी की मदद करता है!
यहां बताया गया है कि ईएस 7 तरीके से कैसे करें, यदि आप बैबल ट्रांसपिलर या टाइपस्क्रिप्ट 2 का उपयोग कर रहे हैं:
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
मैं इस स्क्रिप्ट का उपयोग यह जांचने के लिए करता हूं कि क्या कोई फाइल मौजूद है (यह भी क्रॉस ओरिजनल इशू को हैंडल करता है):
$.ajax(url, {
method: 'GET',
dataType: 'jsonp'
})
.done(function(response) {
// exists code
}).fail(function(response) {
// doesnt exist
})
ध्यान दें कि जब फ़ाइल की जाँच की जा रही है, तो निम्न सिंटैक्स त्रुटि नहीं डाली जाती है जिसमें JSON शामिल नहीं है।
बिना पढ़ा हुआ वाक्यविन्यास: अप्रत्याशित टोकन <
यदि कोई फ़ाइल मौजूद है, तो यह देखने के लिए async कॉल बेहतर दृष्टिकोण है, क्योंकि यह सर्वर से प्रतिक्रिया की प्रतीक्षा करके उपयोगकर्ता के अनुभव को नीचा नहीं करता है। यदि आप .open
तीसरे पैरामीटर के साथ एक कॉल करते हैं , तो यह गलत है (उदाहरण के लिए ऊपर के कई उदाहरणों में 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 );
}
}
स्रोत: https://xhr.spec.whatwg.org/
.open
तीसरे पैरामीटर के साथ कॉल करने true
का प्रयास करें, यह सुनिश्चित करने के लिए कि वह इसे अतुल्यकालिक रूप से कहता है, जैसे कि यह client.open("HEAD", address, true);
@Prere
क्लाइंट कंप्यूटर के लिए इसे निम्न द्वारा प्राप्त किया जा सकता है:
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")
}
यह एक विशिष्ट स्थान पर एक फ़ाइल स्थानांतरित करने के लिए मेरा कार्यक्रम है और मौजूद नहीं होने पर अलर्ट दिखाता है
यदि फ़ाइल मौजूद है, तो चेक करने के लिए जावास्क्रिप्ट फंक्शन:
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;
}
}
पहले फ़ंक्शन बनाता है
$.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);
यह स्वीकार किए गए उत्तर के लिए एक अनुकूलन है, लेकिन मुझे वह नहीं मिला जो मुझे उत्तर से चाहिए था, और इस परीक्षण को काम करना था क्योंकि यह एक कूबड़ था, इसलिए मैं अपना समाधान यहां डाल रहा हूं।
हमें एक स्थानीय फ़ाइल मौजूद होने की पुष्टि करने की आवश्यकता है, और केवल फ़ाइल (एक पीडीएफ) को खोलने की अनुमति दें यदि यह मौजूद है। यदि आप वेबसाइट के URL को छोड़ देते हैं, तो ब्राउज़र स्वचालित रूप से होस्ट नाम का निर्धारण करेगा - यह स्थानीयहोस्ट और सर्वर पर काम कर रहा है:
$.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");
}
});
आपको जो करना है वह चेक करने के लिए सर्वर को एक अनुरोध भेजना है, और फिर आपको परिणाम वापस भेजना है।
आप किस प्रकार के सर्वर से संवाद करने की कोशिश कर रहे हैं? अनुरोध का जवाब देने के लिए आपको एक छोटी सेवा लिखने की आवश्यकता हो सकती है।
यह ओपी के प्रश्न को संबोधित नहीं करता है, लेकिन जो कोई डेटाबेस से परिणाम लौटा रहा है, उसके लिए: यहां एक सरल विधि है जिसका मैंने उपयोग किया है।
यदि उपयोगकर्ता ने एक अवतार अपलोड नहीं किया है तो वह avatar
क्षेत्र होगा NULL
, इसलिए मैं img
निर्देशिका से डिफ़ॉल्ट अवतार छवि सम्मिलित करूंगा ।
function getAvatar(avatar) {
if(avatar == null) {
return '/img/avatar.jpg';
} else {
return '/avi/' + avatar;
}
}
फिर
<img src="' + getAvatar(data.user.avatar) + '" alt="">
मैं एक ऐसा फंक्शन चाहता था जो बूलियन लौटा दे, मुझे क्लोजर और एसिंक्रोनसिटी से जुड़ी समस्याओं का सामना करना पड़ा। मैंने इस तरह हल किया:
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 की जांच करने से पहले बाध्यकारी घटना होनी चाहिए ।