2012-11-22 17 views
6

मैं वेब कोडिंग के लिए नया हूं और हाल ही में JQuery के साथ खेल रहा हूं। मैंने कुछ व्यवहार देखा है और जानना चाहता हूं कि यह सामान्य व्यवहार है और इससे निपटने का सबसे अच्छा तरीका है।टाइमआउट पर Jquery.get व्यवहार?

मैं अपने वेब सर्वर पर एक साधारण काम कर रहा हूं, कभी-कभी सर्वर इसके परिणाम को वापस करने में कुछ मिनट लग सकता है। मुझे क्या पता है कि मेरे सर्वर साइड कोड को एक से अधिक बार बुलाया जाता है, इस मामले में 'userprofile' को 3 बार तक बुलाया जा सकता है।

("li#user").click(function(){ 
    $.get('/userprofile',{partialrender: 'true' }, 
     function (data) { 
      $("div#content").html(data); 
    }); 
}); 

तो मेरे प्रश्न हैं;

1) क्या यह सामान्य व्यवहार है? और 2) यदि ऐसा है तो यह JQuery अतिरिक्त कॉल या ब्राउज़र बना रहा है? 3) इसे संभालने के कुछ अच्छे तरीके क्या हैं?

मुझे सराहना है कि प्रश्न 3 के उत्तर मुश्किल हो सकते हैं, लेकिन किसी भी मदद की बहुत सराहना की जाती है।

बहुत धन्यवाद।

अद्यतन:

धन्यवाद दोस्तों,

ठीक तो मैं उस सटीक कॉल के साथ समस्या उत्पन्न नहीं कर सकते बैकएंड डेटाबेस छोटे किया जा रहा है, लेकिन मैं एक और समान कॉल के साथ कर सकते हैं की वजह से। मैंने मिलने से पहले एक अलर्ट कॉल लगाया और इसे केवल एक बार बुलाया गया। मैं Mojolicious वेबफ्रेमवर्क का उपयोग कर रहा हूँ, तो मुझे आश्चर्य है कि क्या इसके साथ कुछ करने के लिए कुछ हो सकता है? मैं मोर्बो वेब सर्वर का उपयोग कर रहा हूँ।

यहाँ मेरी कोड है कि इस व्यवहार

("li#importDevice").click(function(){ 
    alert('import clicked'); 
    $.get('/importDevice',{device: 'corptest' }, 
     function (data) { 
     $("div#content").html(data); 
    }); 
}) 



sub importDevice { 
    my $self = shift; 
    my $res = "test"; 
    my $dir  = $self->session("dir"); 
    my ($debug, $log, $path, $upload) = createLogHandles($self); 
    my %deviceEntry = device::getDeviceEntry($devicename); 
    print "In Import Device \n"; 
    return $self->redirect_to('failed') unless $self->session('role') eq 'admin'; 

    my %sessiondetails = utils::buildSessionDetails(%deviceEntry); 

#THE FUNCTION BELOW IS WHERE THE DELAY CAN BE. 
my $result = utils::connectToDevice(\%sessiondetails); 

    if ($result ne 'failedconnect') { 
    Vendor::importConfig($session,$dir); 
    Vendor::processConfig($dir,$debug,$upload); 
    } 
$self->render(text => $result); 
} 

का प्रदर्शन करते है मेरी utile :: connectToDevice कुछ समय लगता है जब प्रतिक्रिया करने के लिए है, मुझे लगता है कि पूरे कॉलबैक फिर कहा जाता है।

और यहां मेरे मॉर्बो वेबसर्वर लॉग से आउटपुट है। यह दो कॉल प्राप्त करने के लिए APPEAR करता है।

[Thu Nov 22 00:22:27 2012] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11). 
[Thu Nov 22 00:22:27 2012] [debug] Routing to controller "MyApp::DevT" and action "importDevice". 
[Thu Nov 22 00:22:50 2012] [debug] 200 OK (22.117681s, 0.045/s). 
[Thu Nov 22 00:22:50 2012] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11). 
[Thu Nov 22 00:22:50 2012] [debug] Routing to controller "MyApp::DevT" and action "importDevice". 

उत्तर

1

AJAX कॉल करते समय मेरा सुझाव होगा, एक झंडा सेट करें जो दर्शाता है कि पहले से ही सर्वर से अनुरोध किया गया है। प्रत्येक बार ध्वज की जांच करें और इसकी स्थिति के आधार पर निर्णय लें कि अनुरोध करना है या नहीं। एक बार जब आप सर्वर से प्रतिक्रिया प्राप्त करते हैं तो ध्वज को रीसेट कर दें। तो आप इसे आजमा सकते हैं -

var running=false; 
$("li#user").click(function(){ 

    if(!running){ 
     running=true; 
     $.get('/userprofile',{partialrender: 'true' }, 
     function (data) { 
      $("div#content").html(data); 
      running=false; 
     }); 
    } 
}); 

यह 100 बार बटन और बाढ़ अनुरोधों पर क्लिक करने वाले उपयोगकर्ता की स्थिति से बच जाएगा।

अद्यतन

अगर हालत में निकाला गया त्रुटि।

यदि ऊपर की बात मदद नहीं करती है तो ऐसा करें।

$("li#user").unbind('click').click(function(){ 
    // do the thing 
}); 

यह तत्व से सभी क्लिक संचालकों और घटनाओं को अलग कर फिर से बांधता होगा।

+0

धन्यवाद। यह एक सरल लेकिन प्रभावी समाधान हो सकता है। क्या आप यह पुष्टि करने में सक्षम हैं कि यह सामान्य व्यवहार है या नहीं? मैंने उम्मीद नहीं की कि मेरे सर्वर साइड फ़ंक्शन को फिर से बुलाया जाए।हालांकि, अगर मेरे सर्वर पर आने वाली कॉल आंतरिक रूप से Jquery से हो रही हैं, न कि बटन क्लिक करें, तो क्या यह इसे रोक देगा? मैं इसका परीक्षण करूंगा और देखूंगा। –

+0

यह सामान्य व्यवहार नहीं है। '.get' केवल तभी कॉल किया जाना चाहिए जब उपयोगकर्ता उस पर क्लिक करता है। मुझे लगता है कि क्या हो रहा है, क्लिक करें हैंडलर एक से अधिक बार निष्पादित हो रहा है। – SachinGutte

+0

मुझे लगता है कि समस्या jQuery के साथ नहीं है लेकिन हैंडलर पर क्लिक करें। क्या आप एचटीएमएल कोड पोस्ट कर सकते हैं। – SachinGutte

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