हैलो, मैं एक PHP प्रोजेक्ट पर काम कर रहा हूं जहां मुझे AJAX अनुरोध का उपयोग करके कुछ अनुरोध लोड करने की आवश्यकता है। नीचे मेरे अनुरोध समारोह हैं।

फंक्शन वन: जब शोनोटिफाई इवेंट क्लिक होता है तो मैं सामग्री प्राप्त करने के लिए अजाक्स अनुरोध को कॉल करता हूं और स्पिनर को दिखाने के लिए एजेक्सस्टार्ट का उपयोग करता हूं जब तक कि सामग्री पूरी तरह से तैयार न हो जाए!

 //* First click load nofication
$(document).on('click', '#showNotify', function() {
    let check = $(this).data('check');
    if(check === 0) {
        //* Process notification
        $(this).attr('data-check', 1);
        
        //* Load ajax request
        $(document).ajaxStart(function() {
            $('#notify-wait').show();
        });

        $(document).ajaxComplete(function() {
            $('#notify-wait').hide();
            $('#list-noti').show();
        });

        $.ajax({
            url: '/list-dd-notifications',
            method: 'GET',
            success: function() {
                $('#notif-unread').hide();
            }
        });
    }
});

फ़ंक्शन दो: मुझे यह देखने के लिए सर्वर की ओर से जांच करने की आवश्यकता है कि क्या उपयोगकर्ता के पास एक नया पहले से ही सूचित है और नया अधिसूचना संकेत दिखाता है।

function checkNewFotify() {
    $.ajax({
        url: '/check-notifications',
        method: 'GET',
        success: function(data) {
            if(data) {
                if($('#notif-unread').is(":hidden"))
                {
                    $('#notif-unread').show();
                }
            }
            else
            {
                if($('#notif-unread').is(":visible"))
                {
                    $('#notif-unread').hide();
                }
            }
        }
    });
}

//* check for new notification
setInterval(() => {
    checkNewFotify();
}, 5000);

समस्या: किसी भी समय शो नोटिफ़िकेशन ड्रॉपडाउन होता है, यह स्पिनर को लोडर दिखाता है जब तक कि अनुरोध पूरी तरह से लोड नहीं हो जाता है, अगर फ़ंक्शन checkNewFotify कर रहा है, तो नई अधिसूचना के लिए सर्वर की जांच करने के लिए हर 5 सेकंड में रीफ्रेश करके नौकरी है जब भी checkNewFotify बैकग्राउंड में रिफ्रेश हो रहा हो, तो हर बार स्पिनर लोडर को दिखाने से showNotify में ajaxStart प्रभावित होगा।

कृपया मैं इसे स्पिनर लोडर दिखाने से कैसे रोक सकता हूं, जबकि यह हर 5 सेकंड में रीफ्रेश करता है।

0
Zubdev 12 सितंबर 2020, 10:16

1 उत्तर

सबसे बढ़िया उत्तर

checkNewFotify() पर अजाक्स पर वैश्विक विकल्प को गलत पर सेट करें यह अजाक्सस्टार्ट जैसे हैंडलर को फायरिंग से रोकेगा।

$.ajax({
    url: '/check-notifications',
    method: 'GET',
    global: false,
});
0
crimson589 12 सितंबर 2020, 10:23