मैं एक बाहरी स्क्रिप्ट लोड कर रहा हूं जो कॉलबैक फ़ंक्शन का उपयोग करता है, जो कुछ विशिष्ट डेटा देता है। यदि यह डेटा प्राप्त नहीं हुआ है तो त्रुटि प्रदर्शित की जानी चाहिए।जावास्क्रिप्ट ऑनलोड और स्क्रिप्ट कॉलबैक फ़ंक्शंस, जो प्राथमिकता लेता है?
<script>
//setting initial state so that function will only work once
var visitors_loaded=false;
var my_callback = function(data) {
if (visitors_loaded) return 0;
if (data) {
//success: callback function is called and it has a proper data
visitors_loaded=true;
alert(JSON.stringify(data));
}
else alert ('error'); //something went wrong
};
</script>
<script onload="my_callback(null)" onerror="my_callback(null)"
src="https://api.clicky.com/api/stats/4?site_id=32020&sitekey=9a19b1a4d1171193&type=visitors&date=this-month&output=json&json_callback=my_callback"></script>
आप देख सकते हैं ... बहुत सी बातें स्क्रिप्ट के साथ गलत हो सकता है कि, तो मैं स्वाभाविक रूप से एक onerror घटना कहा:
यहाँ कोड मैं कर दिया है है। यह त्रुटि घटना पर वास्तव में आग लगती है यदि आप स्क्रिप्ट के होस्ट नाम या डोमेन को किसी भी अस्तित्व में बदलते हैं।
हालांकि, अगर आप केवल स्क्रिप्ट के यूआरएल में परिवर्तन कर, यह अभी भी सर्वर से कनेक्ट करता है और बदले में एक ऑनलोड ईवेंट सक्रिय कर सकते हैं। मेरे कॉलबैक फ़ंक्शन को उन अमान्य अनुरोधों के लिए नहीं बुलाया जाएगा, इसलिए मैंने ऑनलोड हैंडलर भी जोड़ा।
अब समस्या, अगर सब सामान्य रूप से भरी हुई और डेटा नहीं दिया गया था, यह दोनों, कॉलबैक फ़ंक्शन और ऑनलोड आग जाएगा। मैंने देखा है कि ऑनलोड से पहले कॉलबैक फ़ंक्शन ट्रिगर किया गया है और विज़िटर_लोडेड वैरिएबल सेट किया गया है ताकि हैंडलर फ़ंक्शन को केवल एक बार बुलाया जा सके।
अभी तक यह जेएस फिडल और मेरी ऑफ़लाइन साइट में पूरी तरह से काम करता है लेकिन मुझे आश्चर्य है कि यह एक अपेक्षित व्यवहार है या नहीं? क्या json_callback फ़ंक्शन हमेशा ऑनलोड हैंडलर से पहले प्राथमिकता है?
https://jsfiddle.net/5sfk9ht5/4/
अच्छा नमूना का जिक्र करते हुए! – Worthy7