जवाबों:
जैसा कि अन्य लोगों ने बताया है कि सेटवर्क और सेटटाइमआउट ट्रिक करेंगे। मैं एक और अधिक उन्नत तकनीक को उजागर करना चाहता था जो मैंने पॉल आयरिश द्वारा इस उत्कृष्ट वीडियो से सीखा था: http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/
आवधिक कार्यों के लिए जो दोहराने के अंतराल से अधिक समय लग सकता है (जैसे एक धीमे कनेक्शन पर HTTP अनुरोध) इसका उपयोग न करना सबसे अच्छा है setInterval()
। यदि पहला अनुरोध पूरा नहीं हुआ है और आप एक और शुरू करते हैं, तो आप उस स्थिति में समाप्त हो सकते हैं जहां आपके पास कई अनुरोध हैं जो साझा संसाधनों का उपभोग करते हैं और एक-दूसरे को भूखा रखते हैं। अंतिम अनुरोध पूरा होने तक अगले अनुरोध को शेड्यूल करने के लिए आप इस समस्या से बच सकते हैं:
// Use a named immediately-invoked function expression.
(function worker() {
$.get('ajax/test.html', function(data) {
// Now that we've completed the request schedule the next one.
$('.result').html(data);
setTimeout(worker, 5000);
});
})();
सादगी के लिए मैंने शेड्यूलिंग के लिए सफलता कॉलबैक का उपयोग किया। इसका एक पक्ष यह है कि असफल अनुरोध अपडेट को रोक देगा। इससे बचने के लिए आप इसके बजाय पूर्ण कॉलबैक का उपयोग कर सकते हैं:
(function worker() {
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 5000);
}
});
})();
हां, आप कोड को लागू करने के लिए जावास्क्रिप्ट setTimeout()
विधि या setInterval()
विधि का उपयोग कर सकते हैं जिसे आप चलाना चाहते हैं। यहां बताया गया है कि आप इसे सेटटाइमआउट के साथ कैसे कर सकते हैं:
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
setTimeout(executeQuery, 5000); // you could choose not to continue on failure...
}
$(document).ready(function() {
// run the first time; all subsequent calls will take care of themselves
setTimeout(executeQuery, 5000);
});
मैंने नीचे दिए गए कोड की कोशिश की,
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
setTimeout(executeQuery, 5000); // you could choose not to continue on failure...
}
$(document).ready(function() {
// run the first time; all subsequent calls will take care of themselves
setTimeout(executeQuery, 5000);
});
यह निर्दिष्ट अंतराल के लिए अपेक्षित के रूप में काम नहीं किया, पृष्ठ पूरी तरह से लोड नहीं हुआ और फ़ंक्शन को लगातार कहा गया। नीचे के रूप में एक अलग समारोह में setTimeout(executeQuery, 5000);
बाहर कॉल करने के लिए बेहतर है executeQuery()
,
function executeQuery() {
$.ajax({
url: 'url/path/here',
success: function(data) {
// do something with the return value here if you like
}
});
updateCall();
}
function updateCall(){
setTimeout(function(){executeQuery()}, 5000);
}
$(document).ready(function() {
executeQuery();
});
इसने ठीक वैसे ही काम किया जैसा इरादा था।