2012-02-06 15 views
6

के साथ समस्याएं मैं नेटटी और jQuery का उपयोग करके लंबे मतदान को लागू करने की कोशिश कर रहा हूं।लंबे मतदान - इंटरनेट एक्सप्लोरर 8

मेरे पास क्रोम और फ़ायरफ़ॉक्स के साथ सही तरीके से काम कर रहा है, लेकिन इंटरनेट एक्सप्लोरर 8 मुझे समस्याएं पैदा कर रहा है।

मैं निम्नलिखित सर्वर को निष्पादित कर रहा हूं जो मेरे सर्वर से अनुरोध भेजता है, सर्वर से प्रतिक्रिया प्राप्त होने तक प्रतीक्षा करता है और फिर दूसरा अनुरोध भेजता है।

function longPollRequest() { 
    $.ajax({ 
     url: '/test-path', 
     type: 'GET', 
     success: function(data, textStatus, jqXHR) { 
      longPollRequest(); 
      console.log('Received: ' + data); 
     } 
    }); 
} 

हालांकि, आईई 8 में मैं एक अनंत लूप में चल रहा हूं, जो ब्राउज़र को ठंडा कर रहा है। दिलचस्प हिस्सा यह है कि मेरा सर्वर केवल आईई से पहला अनुरोध प्राप्त कर रहा है। मैं वास्तव में परेशान हूं कि क्या हो रहा है। अगर किसी के पास कोई विचार है तो मैं वास्तव में मदद की सराहना करता हूं।

+1

पहली पंक्ति 'फ़ंक्शन longPollRequest() {'इसके बजाय होना चाहिए। क्या यह सिर्फ आपकी पोस्ट में एक टाइपो है? – Jacob

+3

मैं शर्त लगाता हूं कि आईई 8 आपके अनुरोध को कैश करता है: क्या आपने कोशिश की है 'url:'/test-path? Nocache = '+ (Math.random * 900000 + 100000) .toString() –

+0

@ जोकोब हां जो सिर्फ एक टाइपो था। फिक्स्ड। –

उत्तर

9

कैशिंग निष्क्रिय और है कि अगर आपकी समस्या ठीक हो देखें:

function longPollRequest() { 
    $.ajax({ 
     url  : '/test-path', 
     type : 'GET', 
     cache : false, 
     success : function(data, textStatus, jqXHR) { 
      longPollRequest(); 
      console.log('Received: ' + data); 
     } 
    }); 
} 

यह प्रत्येक अनुरोध करने के लिए एक समय स्टाम्प संलग्न करने के लिए jQuery बाध्य करेगा। अगर प्रतिक्रिया कैश की जाती है तो यह बहुत जल्दी वापस आ जाएगी और आपके अनंत लूप का कारण बनने का एक अच्छा मौका है।

तुम भी AJAX के अनुरोधों के बीच कम से कम देरी के लिए मजबूर कर सकता है:

var lastRequestTime = 0; 
function longPollRequest() { 
    $.ajax({ 
     url  : '/test-path', 
     type : 'GET', 
     cache : false, 
     success : function(data, textStatus, jqXHR) { 
      var delay = ((new Date().getTime()) - lastRequestTime); 
      if (delay > 1000) { 
       delay = 0; 
      } else { 
       delay = (1000 - delay); 
      } 
      setTimeout(longPollRequest, delay); 
      console.log('Received: ' + data); 
     } 
    }); 
} 

यह पिछले AJAX अनुरोध के समय के खिलाफ वर्तमान समय की जाँच करता है। यदि यह एक सेकंड से अधिक है तो बस बिना देरी के फ़ंक्शन को फिर से चलाएं, अन्यथा कोड को तब तक प्रतीक्षा करें जब तक अनुरोधों के बीच एक सेकंड नहीं चला जाता। delay परिवर्तनीय को परिभाषित करने का शायद एक और शानदार तरीका है लेकिन उपर्युक्त कोड आपको प्रारंभ करना चाहिए।

+3

बहुत बढ़िया, आपका समाधान काम करता है। मुझे सही दिशा बताने के लिए धन्यवाद। मैंने सभी लंबे मतदान वाले प्रतिक्रियाओं के लिए कैश-कंट्रोल: नो-कैश प्रतिक्रिया शीर्षलेख निर्दिष्ट करना समाप्त कर दिया और यह भी काम कर रहा है। –

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