2015-09-01 1 views
5

द्वारा div साझाकरण पर AJAX की धीमी प्रतिक्रिया को कैसे संभालें I मेरे पास एक div है।कई फ़ंक्शन

<div id="test"></div> 

कुछ फ़ंक्शन होने के बाद।

fun1() 
{ 
    $('#test').html(''); 
    $.ajax(function(){ 
    url : abc/index; 
    success : function(response){ 
     $('#test').html(response); 
    } 
    }); 
} 
fun2() 
{ 
    $('#test').html(''); 
    $.ajax(function(){ 
    url : abc/getDetail; 
    success : function(response){ 
     $('#test').html(response); 
    } 
    }); 
} 
fun3() 
{ 
$('#test').html(''); 
    $.ajax(function(){ 
    url : abc/getUser; 
    success : function(response){ 
     $('#test').html(response); 
    } 
    }); 
} 

फ़ंक्शन विभिन्न बटन क्लिक पर कॉल प्राप्त करें।

btn1.click(fun1()) 
btn2.click(fun2()) 
btn3.click(fun3()) 

btn1, btn2, btn3 प्रेस तुरंत एक के बाद एक, मैं div 'परीक्षण' देख सकते हैं कुछ समय 'fun2 की प्रतिक्रिया और इतने पर के बाद पहली' fun1 'प्रतिक्रिया के रूप में होते हैं।

मुझे कारण पता है, क्योंकि मेरी AJAX प्रतिक्रिया बहुत धीमी है, यही कारण है कि यह हो रहा है।

जब कोई बीटीएन 1 पर क्लिक करता है और fun1 की प्रतिक्रिया प्राप्त करने से पहले, btn2 दबाएं। इस मामले में मैं सिर्फ fun2 प्रतिक्रिया लोड करना चाहता हूँ। यदि fun2 देरी कर रहा है तो खाली पृष्ठ दिखाना चाहता है।

मैं बटन प्रेस पर शेष AJAX अनुरोध को मारने के बारे में सोच रहा था। लेकिन एक ही समय में मेरा अन्य AJAX अनुरोध भी जा रहा है, मैं उनको मारना नहीं चाहता। तो अन्य AJAX अनुरोध को मारना मेरे लिए काम नहीं करेगा। अन्य समाधान क्या होगा।

+0

तो समस्या धीमी ajax अनुरोध या इन विभिन्न बटन जो सभी लगते हैं एक ही तत्व में डेटा को पॉप्युलेट के बीच संपर्क है (वैश्विक वार्स मुझे पता है के साथ बिट कच्चे तेल)? –

+0

@ माइक ब्रेंट: धीमी AJAX प्रतिक्रिया। –

+0

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

उत्तर

1

ठीक आप दोनों समस्याओं

1 है: आप एक से अधिक अनुरोध बंद फायरिंग जब आप वास्तव में केवल चाहते हैं कि पिछले एक जाने

2 संसाधित करने के लिए कर रहे हैं: प्रत्येक घटना स्क्रीन अद्यतन करता है और क्या हुआ है की परवाह किए बिना

मेरा सुझाव है कि आप इन दो समस्याओं को अलग से हमला करें।

सबसे पहले, अपनी प्रतिक्रिया के लिए कॉल बैक फ़ंक्शन जोड़ें। यह पृष्ठ को अपडेट करने से पहले आपको शर्तों की जांच करने की अनुमति देगा (जैसे कि 'और कुछ हुआ है?')। यह आपको प्रतिक्रियाओं को पहले फेंकने का मौका देता है।

दूसरा, आपको पहले स्थान पर एकाधिक अनुरोध भेजने से निपटने की आवश्यकता है। जब आप दूसरा बटन क्लिक करते हैं तो आप उन्हें रद्द कर सकते हैं, (लेकिन वे अभी भी सर्वर पर संसाधित हो जाएंगे) या: आप एक टाइमर जोड़ सकते हैं और तुरंत अनुरोध नहीं भेज सकते हैं।

जब आप बटन क्लिक करते हैं तो टाइमर प्रारंभ करें और फिर 200ms कहें? बाद में, अनुरोध आग और प्रतिक्रिया प्रक्रिया।

यदि आप 200ms से पहले एक और क्लिक प्राप्त कर चुके हैं, तो पहले टाइमर को भूलें और एक नया शुरू करें।

वैकल्पिक रूप से आप उन्हें निष्क्रिय करने के बाद उपयोगकर्ता को बटन क्लिक करने से रोक सकते हैं और प्रतिक्रिया प्राप्त होने के बाद ही पुनः सक्रिय हो सकते हैं।

जैसे:

var btnLastPressed =0 
    fun1() 
    { 
     btnLastPressed = 1; 
     $('#test').html(''); 
     $.ajax(function(){ 
     url : abc/index; 
     success : function(response) { finished(1,response);} 
     }); 
    } 

    function finished(btn, response){ 
     if(btnLastPressed==1){ 
      $('#test').html(response); 
     } 
    } 
+0

मुद्दा बहुत आसान है। एक div एकाधिक AJAX अनुरोध द्वारा साझा किया जाता है। आदर्श रूप से आखिरी बटन क्लिक प्रतिक्रिया div पर दिखाई देनी चाहिए। एक महत्वपूर्ण बात यह है कि सभी AJAX प्रतिक्रिया के लिए कभी भी समय नहीं लेगा। बीटीएन 1 प्रेस कहो। इसकी प्रतिक्रिया afte 2 सेकंड आता है। मतलब है कि कोई बीटीएन 2 दबाता है और इसकी प्रतिक्रिया 0.5 सेकंड में आती है। फिर बीटीएन 2 प्रतिक्रिया 1.5 के बाद div पर आती है (यानी 2 - 0.5) सेकंड बीटीएन 1 प्रतिक्रिया div पर आती है। –

+0

हां, केवल जटिलता होगी यदि तीसरी प्रतिक्रिया पहले दो पर संसाधित की गई हो। यानी आपका AJAX अनुरोध ++ 1 करता है या कुछ राज्यपूर्ण – Ewan

+0

कोई प्रतिक्रिया निर्भर नहीं है। –

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