2012-03-14 21 views
10

मैं एक php/जावास्क्रिप्ट चैट विकसित कर रहा हूँ।AJAX फ़ंक्शन को निष्पादित करने के लिए कैसे करें?

जब उपयोगकर्ता लॉग इन करता है, तो उसका उपयोगकर्ता नाम queue नामक एक MySQL तालिका में डाला जाता है। इस डालने लौटाता है जब उपयोगकर्ता पेज बंद कर देता है mysql_insert_id() कि $_SESSION['CHAT_QUEUE_ID']

मैं MySQL तालिका पंक्ति की जरूरत है कहा जाता है एक सत्र चर में संग्रहीत किया जाएगा हटाए जाने के लिए।

JS फ़ाइल

window.onbeforeunload = closeSession; 
function closeSession(){ 
    $.ajax({ 
     url: "/chat/process/chat.php", 
     type: "GET" 
    }); 
    return "disconnected"; 
} 

chat.php

$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID']; 
// query, etc 

वहाँ यह करने के लिए कोई तरीका है:

मैं निम्नलिखित है, लेकिन सफलता नहीं मिली की कोशिश की?

+3

जैसा कि आप जानते के लिए '' onbeforeunload'' सीमित है कि ब्राउज़र समर्थन कर रहे हैं:

टिप्पणी यहाँ देखते हैं? जैसे ओपेरा इसका समर्थन नहीं करता है। – ckruse

+0

मैंने इसके बारे में सोचा नहीं था। कोई उपाय? – matheusvmbruno

+2

सामान्य विधि एक टाइमआउट को परिभाषित करना है। यदि किसी उपयोगकर्ता के पास एक विशिष्ट समय के लिए गतिविधि नहीं होती है तो वह डिस्कनेक्ट हो जाता है। – ckruse

उत्तर

20

आप अपने AJAX async (jquery - AJAX के लिए डिफ़ॉल्ट) को आग लगाते हैं। लेकिन ब्राउजर अनलोड पर कुछ भी इंतजार नहीं करेगा।

AJAX-सेटिंग्स में async : false सेट करने का प्रयास करें। लेकिन आप कभी भी यह सुनिश्चित नहीं कर सकते कि यह हर समय सभी ब्राउज़रों में काम करेगा। http://api.jquery.com/unload/#dsq-comment-body-132164390

+0

यह पूरी तरह से काम करता है। इससे पहले सोचा जाना चाहिए ... धन्यवाद! – matheusvmbruno

+0

तुम्हारा स्वागत matheusvmbruno – StilgarBF

+2

भी कर रहे हैं - अगर आप एक ही कार्यात्मक ajax कॉल है कि आप एसिंक्रोनस रूप से उपयोग करते हैं (या ajax कॉल के एक नंबर) आप उन्हें सेट अपने onbeforeunload बयान में विश्व स्तर पर async कर सकते हैं ट्रिगर कर रहे हैं: \t \t $ .ajaxSetup ({ \t \t \t async: झूठी \t \t}); – JSP64

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

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