2011-12-16 9 views
12

वहाँ $.get() में समय समाप्ति की अवधि निर्धारित करने के लिए एक तरीका है?समय बाहर

मैं अपने स्क्रिप्ट एक चेतावनी है कि लोड हो रहा है कुछ समय (शायद एक व्यस्त सर्वर या जो कुछ भी की वजह से) यह कहीं भी मिल नहीं कर पा रहे ले जा रहा है देना चाहता हूँ के रूप में ..

+0

तुम्हारा मतलब आप एक निश्चित विलंब के बाद एक समारोह को गति प्रदान करना चाहते हैं, या आप एक निश्चित विलंब के बाद '$ .get' अनुरोध को रद्द करना चाहते हैं? अगर यह सिर्फ एक फ़ंक्शन ट्रिगर कर रहा है, तो आप 'setTimeout' का उपयोग कर सकते हैं। – zzzzBov

उत्तर

23

बस $.ajax(...) का उपयोग करें:

$.ajax({ 
    url: url, 
    success: function(data){ 
     //... 
    }, 
    timeout: 1000 //in milliseconds 
}); 
इसके अलावा

के रूप में टिप्पणी में नीचे वर्णित आप .ajaxSetup(...) उपयोग कर सकते हैं टाइमआउट विश्व स्तर पर लागू करने के लिए:

$.ajaxSetup({timeout:1000}); //in milliseconds 
+8

आप इसे विश्व स्तर पर तो क्या करना चाहते हैं: $ .ajaxSetup ({टाइमआउट: 1000}); – epignosisx

+0

@epignosisx भी वह। मैं इसे जवाब में जोड़ दूंगा।^_^ – Neal

+0

सबसे अच्छा टाइमआउट क्या है? 2000ms? – ISFO

2

कॉल $.ajax और timeout विकल्प गुजरती हैं।

+0

:-P @ISFO करने के लिए (है कि सभी है) – Neal

4

$.get जो एक timeout विकल्प है, जो कब तक स्क्रिप्ट कॉलबैक रद्द करने से पहले इंतजार करेंगे निर्दिष्ट करेगा है $.ajax के लिए सिर्फ एक अच्छा आशुलिपि है।

आप वैश्विक डिफ़ॉल्ट $.ajaxSetup({timeout: 9001}) का उपयोग कर, जो आप $.get का उपयोग जारी करने की अनुमति देगा ओवरराइड कर सकते हैं।

आप बस अनुरोध रद्द किए बिना उपयोगकर्ता को सचेत करना चाहते हैं, $.ajax उपयोग करते हैं, एक समय समाप्ति सेट है, और complete कॉलबैक में टाइमआउट रद्द कर दें।

यहां कुछ उदाहरण स्टार्टर कोड है, मैं इसके बारे में किसी भी परीक्षण नहीं किया है, और यह शायद काम का एक सा के साथ एक प्लगइन में तब्दील किया जा सकता है:

(function(){ 
    var t, delay; 
    delay = 1000; 
    $('.delay-message').ajaxStart(function() { 
    var $this; 
    $this = $(this); 
    t = setTimeout(function() { 
    $this.trigger('slowajax'); 
    }, delay); 
    }).ajaxComplete(function() { 
    if (t) { 
     clearTimeout(t); 
    } 
    }); 
}()); 

$('.delay-message').on('slowajax', function() { 
    $(this).show().delay(2000).fadeOut(1000); 
}); 
2

उपयोग ajaxSetup

$.ajaxSetup({ 
timeout:2000 // in milliseconds 
}); 

//your get request here 
1

इसके लिए बस .ajax() का उपयोग करें; सभी .get() के बाद बस इसके चारों ओर एक रैपर है।

function doAjax() { 
    var $warning = $("#warning").hide(), // Always hide to start with 
     warningTimeoutId = 0; 

    warningTimeoutId = window.setTimeout(function() { 
     $warning.show(); 
    }, 10000); // wait 10s before showing warning 

    $.ajax({ 
     timeout: 30000, // 30s timeout 
     complete: function() { 
      // Prevent the warning message from appearing 
      window.clearTimeout(warningTimeoutId); 
     } 
     ... // other config 
    }); 
} 

यहाँ आप सिर्फ अजाक्स कॉल जो 10s के बाद दिखाया जाएगा जब तक कि Ajax अनुरोध पहले ही समाप्त हो गया है से पहले समय समाप्त शुरू: आप की तरह कुछ कर सकते हैं।

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