2016-08-04 12 views
6

शीर्षक के अनुसार नेटवर्क अनुरोध समय समाप्त होता है जैसा कि शीर्षक में कहा गया है, मैं जानना चाहता हूं कि जब एजेक्स अनुरोध नियंत्रक कार्रवाई में भेजा जाता है और इस समय के दौरान, अनुरोध पूरा होने से पहले कुछ एमएस के लिए नेटवर्क टाइमआउट होता है।क्या होता है जब AJAX अनुरोध के दौरान एएसपी.NET एमवीसी एक्शन

Reply from <Server IP>: bytes=32 time=31ms TTL=122 
Request timed out 
Reply from <Server IP>: bytes=32 time=28ms TTL=122 

टाइमआउट को ध्यान में रखते हुए केवल कुछ एमएस के लिए होता है, मेरे AJAX अनुरोध पर इसका क्या असर होगा?

यह SO question में बताया गया है कि यह हमारे आवेदन में सामना कर रहे किसी समस्या की निरंतरता में है और मैं जानना चाहता हूं कि वे किसी तरह से संबंधित हैं या नहीं।

मैंने इसी तरह के मुद्दों के लिए गुगल किया है लेकिन कुछ भी उपयोगी नहीं मिला।

संपादित करें: AJAX पर प्रभाव के अलावा, क्या यह क्रिया विधि के व्यवहार (सर्वर) को प्रभावित करेगा?

उत्तर

3

अनुरोध "असफल" होगा, जिसका अर्थ है कि यह आपके AJAX अनुरोध की onError स्थिति दर्ज करेगा। स्थिति कोड तब 0 होगा, क्योंकि वास्तविक स्थिति कोड (उदाहरण के लिए 200 ओके या 500 आंतरिक सर्वर त्रुटि) निर्धारित करने के लिए सर्वर से कोई प्रतिक्रिया नहीं है।

6

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

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

$.ajax({ 
    ... 
    timeout: 5000, //specify the timeout value in milliseconds 
    error: function(jqXHR, textStatus, errorThrown) { 
     if(textStatus==="timeout") { 
      //code to execute when timeout occurs 
     } 
    } 
});​ 

साथ ही, आपको भी अनुरोध करता है, तो जांच कर सकते हैं complete कॉलबैक फ़ंक्शन (जैसा कि ऊपर दिखाया गया है) में एक स्ट्रिंग है जो दूसरी तर्क की जांच करके समय निकाल दिया गया है और अनुरोध का समय समाप्त होने पर मूल्य timeout होगा।

इसके अलावा, इस पर ध्यान दें:

समय समाप्ति की अवधि बिंदु $ .ajax कॉल किया जाता है पर शुरू होता है; यदि कई अन्य अनुरोध प्रगति पर हैं और ब्राउज़र के पास कोई कनेक्शन उपलब्ध नहीं है, तो इसे भेजने से पहले समय निकालने के अनुरोध के लिए संभव है।

अनुरोध टाइमआउट आमतौर पर टाइमआउट विकल्प के साथ विशिष्ट अनुरोधों के लिए ओवरराइड होने के बजाय $ .ajaxSetup() का उपयोग करके डिफ़ॉल्ट रूप से छोड़ दिया जाता है या वैश्विक डिफ़ॉल्ट के रूप में सेट किया जाता है।

मैं fiddler की तरह एक वैकल्पिक HTTP/एस यातायात निगरानी उपकरण का उपयोग करने के लिए दूसरा अनुरोध के पीछे रहस्य को खोजने के लिए सुझाव है।

और जानकारी: jQuery ajax documentation

+0

आपके विस्तृत उत्तर के लिए धन्यवाद। यातायात निगरानी के बारे में आपके सुझाव के लिए, फिडलर/क्रोम नेटवर्क टैब क्लाइंट के अंत से केवल एक ही अनुरोध दिखाता है। –

0

टाइम-आउट के मामले में अपनी सफलता कॉलबैक अभ्यस्त पर अमल तो आप ग्राहक के पक्ष में एक त्रुटि कॉलबैक ऐसे मुद्दों को संभालने के लिए लिखने के लिए की है।

आपको टाइम-आउट के मामले में सर्वर की तरफ से अपवाद उठाना होगा ताकि वह क्लाइंट को एक त्रुटि के रूप में वापस लाएगा, जिस तरह से आप समय-समय पर संभाल सकते हैं।

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