2012-02-19 13 views
9

कॉल मैं डेटा एक तालिका में मौजूद रहने पर जाँच करने के लिए setTimeout का उपयोग करने के लिए कोशिश कर रहा हूँ: डेटा मौजूदअजाक्स के साथ setTimeout का उपयोग कर

तो डेटा लाने नहीं है। यदि डेटा मौजूद नहीं है तो लोड का उपयोग कर डेटा प्राप्त करें और फिर प्रत्येक एक्स मिनट में एक ही चीज़ करें।

यहां तक ​​कि मेरे पास अब तक है। किसी कारण से, setTimeout काम नहीं करता है जब यह ब्लॉक ब्लॉक करता है।

मुझे यह भी सुनिश्चित नहीं है कि यह करने का यह सबसे अच्छा तरीका है या नहीं।

var sTimeOut = setTimeout(function() { 
     $.ajax({ 
      url: 'CheckIfDataExists/' + 
         new Date().getTime(), 
      success: function (response) { 
       if (response == 'True') { 
        $('.DataDiv') 
         .load('GetFreshData/' + new Date() 
          .getTime(), { "Id": $("#RowID").val() }); 
       } 
      }, 
      complete: function() { 
       clearTimeout(sTimeOut); 
      } 
     }); 
    }, 10000); 

किसी भी मदद की सराहना की जाएगी।

अपडेट किया गया ...

setTimeout(function(){checkData()}, 5000); 
    function checkData(){ 
    $.ajax({ 
      url: 'CheckIfDataExists/' + 
          new Date().getTime(), 
      success: function (response) { 
       if (response == 'True') {      
        $('.DataDiv') 
          .load('GetFreshData/' + new Date() 
           .getTime(), { "Id": $("#RowID").val() }); 
       } else { 
        $('.OutOfWindow').html('No Data Found'); 
        setTimeout(function() { checkData() }, 5000); 
       } 
      }, 
      complete: function() { 
       // clearTimeout(sTimeOut); 
      } 
     }); 
    } 
+0

आप [अपने डिबगर चेक किया गया] है (http://blog.niftysnippets.org /2011/03/no-excuse.html) यह देखने के लिए कि क्या गलत है? जेएस पूरी तरह से ठीक लगता है: http://jsfiddle.net/FgT22/ – gideon

+0

हां। यह ठीक काम कर रहा है। यह तब तक काम करता है जब डेटाबेस में कोई डेटा नहीं होता है (वह तब होता है जब प्रतिक्रिया सत्य होती है)। जब यह गलत होता है, तो मैं x मिनट के बाद पुनः जांच करना चाहता हूं। यही वह जगह है जहां मुद्दा लगता है। यह पुनः जांच नहीं करता है। सफलता पर टाइमआउट को समाशोधन करने की मेरी आइडिया इसलिए है कि पिछला लोड पूरा होने से पहले अगली जांच को निकाल दिया जाना चाहिए – mkizito76

+0

यह मेरे पास अब है और ऐसा लगता है। क्या यह करने का यह सबसे अच्छा तरीका है? वैसे, – mkizito76

उत्तर

16

कुछ इस तरह काम करना चाहिए, पहले टुकड़ा स्थानीय है तो मैं इसे चलाने के परीक्षण कर सकता है। मैं कोड की व्याख्या की है और उसे नीचे है जैसा आप (आपकी पोस्ट पर आपकी अद्यतन से) setTimeout पता चला कि क्या अपने कोड

होना चाहिए केवल अपने लक्ष्य समारोह एक बार कहता है, तो जाँच आप कॉल करने की आवश्यकता रखने के लिए यह फिर से अगर आप एक चेक करते हैं जो विफल रहता है।

JsFiddle पर यह देखें: http://jsfiddle.net/jQxbK/

//we store out timerIdhere 
var timeOutId = 0; 
//we define our function and STORE it in a var 
var ajaxFn = function() { 
     $.ajax({ 
      url: '/echo/html/', 
      success: function (response) { 
       if (response == 'True') {//YAYA 
        clearTimeout(timeOutId);//stop the timeout 
       } else {//Fail check? 
        timeOutId = setTimeout(ajaxFn, 10000);//set the timeout again 
        console.log("call");//check if this is running 
        //you should see this on jsfiddle 
        // since the response there is just an empty string 
       } 
      } 
     }); 
} 
ajaxFn();//we CALL the function we stored 
//or you wanna wait 10 secs before your first call? 
//use THIS line instead 
timeOutId = setTimeout(ajaxFn, 10000); 

आपका कोड इस तरह दिखना चाहिए:

var timeOutId = 0; 
var ajaxFn = function() { 
     $.ajax({ 
      url: 'CheckIfDataExists/' + new Date().getTime(), 
      success: function (response) { 
       if (response == 'True') { 
        $('.DataDiv'). 
        load('GetFreshData/' + new Date(). 
          getTime(), { "Id": $("#RowID").val() }); 
        clearTimeout(timeOutId); 
       } else { 
        timeOutId = setTimeout(ajaxFn, 10000); 
        console.log("call"); 
       } 
      } 
      }); 
} 
ajaxFn(); 
//OR use BELOW line to wait 10 secs before first call 
timeOutId = setTimeout(ajaxFn, 10000); 
+0

वाह, यह कमाल है! मदद के लिए बहुत - बहुत धन्यवाद। एक और बात, जब भार घटना तुरंत AJAXFN जुर्माना निकालती है। मैं AJAXFN आग से पहले एक प्रतीक्षा (10 सेकंड कहें) चाहता हूं (क्योंकि लोड कभी-कभी ले सकता है)। दूसरे शब्दों में, मैं AJAXFn को आग लगाने से पहले 10 सेकंड का इंतजार करना चाहता हूं। क्या यह संभव है? – mkizito76

+0

@ user1219415 आपका मतलब है कि आप अपने पहले कॉल से 10 सेकंड पहले इंतजार करना चाहते हैं? मैंने जवाब अपडेट किया। – gideon

+0

फैंटास्टिक! धन्यवाद एक बार फिर – mkizito76

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