2009-10-19 19 views
24

मैंने आंतरिक उपयोग के लिए पीडीएफ फाइलों के संग्रह तक पहुंचने के लिए एक छोटा जावास्क्रिप्ट/jQuery प्रोग्राम विकसित किया। और अगर फ़ाइल वास्तव में मौजूद है तो मैं एक पीडीएफ फ़ाइल की जानकारी div को हाइलाइट करना चाहता था।जावास्क्रिप्ट/jQuery टूटी हुई लिंक

प्रोग्रामेटिक रूप से यह निर्धारित करने का कोई तरीका है कि फ़ाइल का लिंक टूटा हुआ है या नहीं? यदि हां, तो कैसे?

कोई भी गाइड या सुझाव लागू किया गया है।

उत्तर

52

यदि फ़ाइलें एक ही डोमेन पर हैं, तो आप Alex Sexton के रूप में उनके अस्तित्व के परीक्षण के लिए AJAX का उपयोग कर सकते हैं; हालांकि, आपको GET विधि का उपयोग नहीं करना चाहिए, बस HEAD और उसके बाद अपेक्षित मान (200, या 400 से कम) के लिए HTTP स्थिति की जांच करें।

यहाँ एक related question से प्रदान की एक सरल विधि है:

function urlExists(url, callback) { 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     callback(xhr.status < 400); 
    } 
    }; 
    xhr.open('HEAD', url); 
    xhr.send(); 
} 

urlExists(someUrl, function(exists) { 
    console.log('"%s" exists?', someUrl, exists); 
}); 
+0

के पीछे हूं, मैं चाहता हूं कि मैं जानता हूं कि ओपी के प्रश्न के लिए इसे कैसे कार्यान्वित किया जाए। किसी को? – Trip

+0

आप क्या पूछ रहे हैं? –

+0

मुझे इस कोड के साथ एक त्रुटि मिलती है: "उत्पत्ति http: // लोकलहोस्ट को एक्सेस-कंट्रोल-अनुमति-उत्पत्ति द्वारा अनुमति नहीं है।" – rob

2

यदि फ़ाइलें बाहरी वेबसाइट पर नहीं हैं, तो आप प्रत्येक फ़ाइल के लिए AJAX अनुरोध करने का प्रयास कर सकते हैं। यदि यह विफलता के रूप में वापस आता है, तो आप जानते हैं कि यह अस्तित्व में नहीं है, अन्यथा, यदि यह लौटाए गए किसी भी सीमा से अधिक पूरा करता है और/या लेता है, तो आप अनुमान लगा सकते हैं कि यह मौजूद है। यह हमेशा सही नहीं होता है, लेकिन आम तौर पर 'filenotfound' अनुरोध त्वरित होते हैं।

var threshold = 500, 
    successFunc = function(){ console.log('It exists!'); }; 

var myXHR = $.ajax({ 
    url: $('#checkme').attr('href'), 
    type: 'text', 
    method: 'get', 
    error: function() { 
    console.log('file does not exist'); 
    }, 
    success: successFunc 
}); 

setTimeout(function(){ 
    myXHR.abort(); 
    successFunc(); 
}, threshold); 
0

आप $.ajax पर कर सकते हैं। अगर फ़ाइल मौजूद नहीं है तो आपको 404 त्रुटि मिलेगी और फिर आप त्रुटि कॉलबैक में जो कुछ भी आपको चाहिए (UI-wise) कर सकते हैं। अनुरोध पर ट्रिगर करने के लिए यह आपके ऊपर निर्भर है (टाइमर?) बेशक यदि आपके पास कुछ सर्वर-साइड कोडिंग करने की क्षमता भी है तो आप एक एकल AJAX अनुरोध कर सकते हैं - निर्देशिका स्कैन करें और फिर जेएसओएन के रूप में परिणाम लौटाएं।

2

जारी करना कि जावास्क्रिप्ट ताकि आप अन्य डोमेन की सामग्री आकर्षित नहीं कर सकते हैं एक ही मूल नीति है। यह इसे ऊपर उठाकर नहीं बदलेगा (17 वोटों के बारे में सोच रहा है)। मुझे लगता है कि आपको बाहरी लिंक के लिए इसकी आवश्यकता है, इसलिए यह केवल .js के साथ असंभव है ...

1

सेबेस्टियन की तरह कहते हैं कि यह वही मूल नीति के कारण संभव नहीं है। यदि साइट सार्वजनिक डोमेन पर (अस्थायी रूप से) प्रकाशित की जा सकती है तो आप वहां से एक लिंक चेकर सेवाओं का उपयोग कर सकते हैं। मैं checkerr.org

संबंधित मुद्दे