2010-07-25 22 views
21

मैं jQuery $ .ajax के माध्यम से एक छवि पथ लोड कर रहा हूं और छवि दिखाने से पहले मैं यह देखना चाहता हूं कि यह वास्तव में मौजूद है या नहीं। क्या मैं छवि लोड/तैयार घटना या कुछ ऐसा निर्धारित करने के लिए उपयोग कर सकता हूं कि फ़ाइल पथ मान्य है?jQuery: जांचें कि छवि मौजूद है

.myimage प्रदर्शन करने के लिए सेट करने के बाद: कोई नहीं, मैं

$(".myimage").attr("src", imagePath); 
$(".myimage").load(function() { 
    $(this).show(); 
}); 

की तरह कुछ करने के लिए उम्मीद कर रहा है कि संभव ऐसा कुछ है?

+0

यह मदद कर सकता है http://www.ambitionlab.com/how-to-check-if-a-file- मौजूद-उपयोग-jquery-2010-01-06 – Hari

उत्तर

33

ठीक है, आप .error() हैंडलर ...

इस तरह,

$(".myimage").error(function(){ 
    $(this).hide(); 
}); 
अच्छी तरह से

बाध्य कर सकते हैं, तुम्हारा ठीक पहले से ही load-event

$(".myimage").load(function() { 
    $(this).show(); 
}); 

के साथ समस्या के साथ इस करता है, तो है जावास्क्रिप्ट अक्षम किया गया था छवि कभी नहीं दिखाएगी ...

+0

ओह सच में? मुझे नहीं लगता था कि भार विधि का उपयोग किया जा सकता है, मैंने इसे सिर्फ एक उदाहरण के रूप में पोस्ट किया है जिसे मैं करने की कोशिश कर रहा हूं। इसके अलावा मैं जावास्क्रिप्ट अक्षम होने के बारे में चिंतित नहीं हूं क्योंकि मैं $ .ajax का उपयोग कर रहा हूं .. :) +1 – Marko

+0

कृपया बताएं कि डाउन-वोट क्यों। इसलिए यदि आपके पास कुछ है तो यह उत्तर बेहतर हो सकता है ... – Reigel

+0

ऐसा लगता है कि यह केवल इंटरनेट एक्सप्लोरर 9 में काम करता है। (मैंने अन्य यानी संस्करणों का परीक्षण नहीं किया है)। मैं एकाधिक $ (दस्तावेज़) का उपयोग कर रहा हूं। पहले से ही काम करता है लेकिन ऐसा लगता है कि यह अन्य ब्राउज़रों में बिना किसी हिचकिचाहट के काम करता है और कोई त्रुटि नहीं फेंक रही है। आप इसे यहां देख सकते हैं - यदि सर्वर पर कोई कवर मौजूद नहीं है, तो इसका मतलब है कि इसे हटा दिया गया है और फिर कवर हटाई गई जानकारी दिखाएं। http://fordummiescovers.com/share.php?id=100 जेएस कार्यक्षमता: http://fordummiescovers.com/js/covercheck.js – BWelfel

4

चूंकि आप पहले से ही एक AJAX अनुरोध कर रहे हैं, इसलिए मैं इसे सर्वर-साइड ऐप पर ऑफ़लोड कर दूंगा जो आपके AJAX का समर्थन कर रहा है। यह देखने के लिए छोटा है कि सर्वर से कोई फ़ाइल मौजूद है या नहीं, और आप परिणामों को निर्दिष्ट करने के लिए वापस भेजे गए डेटा में चर सेट कर सकते हैं।

+1

+1 अच्छी सोच। –

+1

-1 '.load()' ओपी का उपयोग कर रहा है अजाक्स नहीं है .... http://api.jquery.com/load-event/ – Reigel

+0

यह एक सभ्य उत्तर और एक संभावित विकल्प है, लेकिन मेरा सवाल है अगर मैं विशेष रूप से jQuery के साथ जांच कर सकते हैं .. हालांकि सर्वर विधि के लिए +1। – Marko

6

एक ओल डी धागा मुझे पता है, लेकिन मुझे लगता है कि यह बेहतर किया जा सकता है। मैंने देखा कि ओपी में अड़चन समस्याएं हैं जो छवि लोड करने और एक साथ जांच में त्रुटि के कारण हो सकती हैं। बेहतर होगा कि छवि लोड पहले जाने के लिए और फिर त्रुटियों की जांच:

$(".myimage").attr("src", imagePath).error(function() { 
    // do something 
}); 
20

प्रयास करें:

function urlExists(testUrl) { 
var http = jQuery.ajax({ 
    type:"HEAD", 
    url: testUrl, 
    async: false 
    }) 
    return http.status; 
     // this will return 200 on success, and 0 or negative value on error 
} 

तो

if(urlExists('urlToImgOrAnything') == 200) { 
    // success 
} 
else { 
    // error 
} 
+0

यह निम्नलिखित चेतावनी में परिणाम देता है: "मुख्य धागे पर सिंक्रोनस XMLHttpRequest को बहिष्कृत किया गया है अंतिम उपयोगकर्ता के अनुभव के लिए इसके हानिकारक प्रभावों के कारण। " –

2

का उपयोग यह सवाल एक जोड़ी साल पुराना है, लेकिन यहां किसी को देखने के लिए त्रुटि हैंडलर के लिए एक बेहतर उदाहरण उपयोग है।

$("img") 
    .error(function(){ 
    $(this).hide(); 
    }) 
    .attr("src", "image.png"); 

ईवेंट को पकड़ने के लिए आपको छवि लोड करने का प्रयास करने से पहले आपको त्रुटि हैंडलर संलग्न करने की आवश्यकता है।

स्रोत: http://api.jquery.com/error/

0

यह मैं क्या मेरा किया है:

$.get('url/image', function(res){ 
    //Sometimes has a redirect to not found url 
    //Or just detect first the content result and get the a keyword for 'indexof' 
    if (res.indexOf('DOCTYPE') !== -1) { 
     //not exists 
    } else { 
     //exists 
    } 
}); 
संबंधित मुद्दे