2010-03-16 24 views
35

मेरे पास जावास्क्रिप्ट का एक टुकड़ा है जो प्रत्येक एन सेकेंड में एक शर्त (AJAX कॉल के माध्यम से) की जांच करता है। यदि वह स्थिति सत्य है, तो यह जांच बंद कर देता है। मैं निम्नलिखित तरीके से लागू किया है:क्या एक सेट अंतराल हैंडलर के अंदर clearInterval को कॉल करना ठीक है?

var stopTimer; 
var timerId = setInterval(function() { 

    /* Make Ajax Calls and set stopTimer */ 

    if (stopTimer) { 
     clearInterval(timerId); 
    } 
}, 10000); 

हालांकि, मैं अनियमित व्यवहार लगता है: कभी कभी काम करता है, लेकिन अन्य समय में, यह हमेशा के लिए जाँच रखता है। मैंने जांच की है (जितना संभव हो) कोड के किसी भी भाग में कोई त्रुटि नहीं है।

इसलिए मुझे संदेह है कि एक सेट के अंदर स्पष्ट अंतराल को कॉल करना अंतराल हैंडलर अपराधी हो सकता है। क्या वह सही है? क्या एक सेट अंतराल हैंडलर के अंदर clearInterval कॉल करना ठीक है?

आपके ध्यान के लिए धन्यवाद

उत्तर

19

यह सुरक्षित है। समस्या शायद स्टॉपटाइमर के साथ करने के लिए संभव है जैसा आप उम्मीद करते हैं।

+0

धन्यवाद। निष्कर्षों की जांच और साझा करेंगे –

3

मुझे नहीं लगता कि आपके कोड के साथ कोई समस्या नहीं होगी जब तक कि AJAX फ़ंक्शन गलत न हो। आपको AJAX फ़ंक्शन की सफलता और त्रुटि कॉलबैक का ख्याल रखना होगा ताकि लूप को रोका जा रहा न हो।

मुझे लगता है कि आप लगातार प्रतिक्रिया के लिए सर्वर को मतदान कर रहे हैं और फिर उचित कार्रवाई कर रहे हैं। इस तरह की प्रक्रिया करने के लिए आप Reverse AJAX का उपयोग कर सकते हैं।

+0

धन्यवाद। हां यह संभव है कि अजाक्स के पूर्ण होने के लिए राउंड-टाइम सेट इंटरवल द्वारा निर्धारित दोहराव अंतराल में हस्तक्षेप कर सकता है। इसमें देखें और निष्कर्ष –

1

सुनिश्चित करें कि आप अनजाने में अपने कोड में कहीं और टाइमर नाम का पुन: उपयोग नहीं कर रहे हैं जिसके परिणामस्वरूप आप हमेशा परिभाषित किए जाने वाले दूसरे टाइमर को रोक देंगे।

या तो एक समारोह

var timerForAjax = setInterval(function() { 

    /* Make Ajax Calls and set stopTimer */ 

    if (stopTimer) 
    { 
     clearInterval(timerForAjax); 
    } 
}, 10000); 

मैं काफी लापरवाह मेरी घड़ी interval कहते थे और नहीं पता था मैं एक ही दायरे में दो टाइमर का निर्माण कर रहा दोनों बुलाया टाइमर का एक अलग नाम है, या यह गुंजाइश देना interval। लगभग एक घंटे तक आईओएस 8 को दोषी ठहराया जब तक मुझे एहसास हुआ कि that इसके साथ कुछ लेना देना नहीं था।

+0

साझा करें यदि यह वही है जो आपने किया था तो यह समझाएगा कि यह हमेशा के लिए क्यों जांच रहा था –

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