2011-02-11 18 views
5

मैं एक लंबी मतदान विधि चैटरूम कर रहा हूं। लेकिन ऐसा लगता है कि, जब एक लंबा मतदान होता है और मैं क्रोम में पृष्ठ को रीफ्रेश करता हूं या मैं सब कुछ एक बार एसिंक अनुरोध भेजने की कोशिश करता हूं (यानी मैं ब्राउज़र को बंद/दोबारा खोलने तक फिर से अपना डोमेन लोड नहीं कर सकता)।लंबे मतदान समय समाप्ति मुद्दे

मेरे ग्राहक पक्ष कोड है:

$(document).ready(function() { 
    setTimeout(
     function() { 
     longPollForMessages(); 
     }, 
     500 
    ); 
    }); 

function longPollForMessages() 
{ 
    $.ajax({ 
    url: url, 
    dataType: 'json', 
    success: function(data) {  
     $('#chat_messages').append('<div>'+data.messages+'</div>'); 

     longPollForMessages(); 
    } 
    }); 
} 

और मेरे serverside:

while(true) { 
     $messages = $db->getMessages(); 

     if (!$messages || sizeof($messages)==0) { 
     sleep(1); 
     } else { 
     echo '{"message":'.json_encode($messages).'}'; 
     die(); 
     } 
    } 

कोई भी विचार? कोई वाक्यविन्यास त्रुटियां मानें।

+0

सर्वरसाइड कोड –

+0

में 'echo' के बाद' ब्रेक डालने का प्रयास करें; धन्यवाद आपका उत्तर :) मैं वास्तव में ऐसा था लेकिन मेरे प्रश्न कोड में शामिल करना भूल गया। तो यह मुद्दा नहीं है। –

+2

दोस्तों, मैंने इसे इस प्रश्न से बाहर निकाला: http://stackoverflow.com/questions/4457178/long-polling-locking-up-other-ajax-calls - php एक दिए गए सत्र को लॉक करता है जब तक कि पृष्ठ लोड नहीं हो जाता है दूसरा AJAX कॉल के माध्यम से जाने में सक्षम नहीं था। Session_write_close() को कॉल करके आपको लॉक जारी करना होगा; –

उत्तर

0

मैंने इसे इस प्रश्न से बाहर निकाला: stackoverflow.com/questions/4457178/... - php एक दिए गए सत्र को लॉक करता है जब तक कि पृष्ठ लोड नहीं हो जाता है, इसलिए दूसरा AJAX कॉल पार करने में सक्षम नहीं था। Session_write_close() को कॉल करके आपको लॉक जारी करना होगा;

0

मैं देख सकता हूं कि आप पहले से ही अपने प्रश्न का उत्तर दे चुके हैं, लेकिन मुझे हाल ही में एक ही समस्या थी और इसे संभालने का एक और तरीका मिला है 0xको अजाक्स कॉल पर अक्षम करना है, फिर इसे success पर पुनरारंभ करें। इस तरह आप जानकारी के लिए अपने सर्वर को पिंग नहीं कर रहे हैं जब यह देने के लिए तैयार नहीं है।

+0

AFAIK, setTimeout केवल एक बार फ़ंक्शन को कॉल करता है। इसलिए आपको सफल अनुरोध के बाद भी कॉल को पुनरारंभ करने की आवश्यकता है। क्या आप अपने उत्तर पर थोड़ा और विस्तार कर सकते हैं? –

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