2013-01-09 17 views
18

से निपटने मैं jQuery getJSON() समारोह का उपयोग कर रहा समय-समाप्त हुआ। इस कार्य को बिना किसी समस्या के डेटा मिल रहा है। लेकिन कभी-कभी इंतजार कर रहा है, इंतजार कर रहा है ... और मेरी लोडिंग बार पेज के केंद्र में लोडिंग लोडिंग लोडिंग दिखा रही है। तो jQuery ajax() फ़ंक्शन में टाइमआउट चर होता है। लेकिन मैं getJSON फ़ंक्शन का उपयोग करना चाहता हूं। और मुझे लगता है कि मैं ajaxStart() और ajaxStop() फ़ंक्शंस का उपयोग कर सकता हूं। पर कैसे?getJSON

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: success 
}); 

तो तुम $.ajax() का उपयोग करें और के रूप में वांछित timeout विकल्प निर्दिष्ट कर सकते हैं:

$('.loadingDiv') 
    .hide() 
    .ajaxStart(function() { 
     $(this).fadeIn(); 
     setTimeout("throw '';",15000) //i used this but didn't work 
     setTimeout("return;",15000) //i used this but didn't work 
     setTimeout("abort();",15000) //i used this but didn't work.(Abort all ajax events) 
    }) 
    .ajaxStop(function() { 
     $(this).fadeOut(); 
    }); 
+0

जब आप 'setTimeout' के तार (जो आप * * कभी नहीं करना चाहिए) गुजरती हैं, यह' उन्हें वैश्विक क्षेत्र में eval's। तो, आप इससे 'वापसी' नहीं कर सकते हैं। –

+0

आप के अपने मंगलाचरण में एक टाइमआउट स्थापित करना चाहिए ' –

+0

.ajax' @Asad: ओपी वह' 'बजाय $ .ajax' की $ .getJSON' का उपयोग करना चाहता है। –

उत्तर

13

getJSON() एक वादा है जिस पर आप abort समारोह कॉल कर सकते हैं रिटर्न गिटार का जवाब बेहतर है।

+1

+1 क्योंकि यह ओपी को '.ajax' – renab

+0

के बजाय '.getJSON' का उपयोग करने की अनुमति देता है हां सच्चा उत्तर' अजाक्स का उपयोग करें 'है। लेकिन मैंने भी अपने प्रश्न में लिखा था। वैसे भी यह जवाब सहायक था। धन्यवाद। – pheaselegen

+0

लेकिन यह समस्या की मदद नहीं करेगा या यह होगा? 'getJSON' के लिए लिया गया समय सर्वर साइड स्क्रिप्ट को पूरा करने के लिए प्रतीक्षा करने के लिए बकाया है और यदि वह समय ले रहा है तो अनुरोध निरस्त कर रहा है और फिर कोई अन्य भेजने से समस्या –

15

getJSON() बस निम्नलिखित के लिए एक आशुलिपि है। यह भी देखें:

var p = $.getJSON(..., function(){ alert('success');}); 
setTimeout(function(){ p.abort(); }, 2000); 

संपादित करें: लेकिन अपने लक्ष्य सिर्फ निरस्त करने के लिए अगर यह बहुत ज्यादा समय लगता है, तो है अगर lethal- http://api.jquery.com/jQuery.getJSON/

+0

+1 यह शायद मेरे उत्तर से ओपी के लिए अधिक उपयोगी है। –

+0

+1 जो मैं सोच रहा था (इसलिए हमारे उत्तरों में समानता, आप ड्रा पर तेज थे) – renab

+0

एक समान [उत्तर यहां] (http://stackoverflow.com/a/7613888/386579) है जो कर सकता है jquery AJAX कॉल के लिए टाइमआउट जोड़ने के लिए बढ़ाया जाना चाहिए। –

1

setTimeout सुविधा वैश्विक क्षेत्र में milisecons की एक निर्धारित संख्या के बाद कोड का एक सेट निष्पादित करता है।

getJSON समारोह (प्रति jQuery दस्तावेज़ यहां http://api.jquery.com/jQuery.getJSON/) है आशुलिपि के लिए:

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: success 
}); 

ताकि आप इतने की तरह अपने कॉल करने के लिए चाहते हो जाएगा:

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: success, 
    timeout: 15000 
}); 

$('.loadingDiv') 
    .hide() 
    .ajaxStart(function() { 
     $(this).fadeIn(); 
    }) 
    .ajaxStop(function() { 
     $(this).fadeOut(); 
    }); 
9

के रूप में घातक-गिटार उल्लेख getJSON() फ़ंक्शन $.ajax() के लिए सिर्फ एक शॉर्टेंड है। यदि आप यह जानना चाहते हैं कि वास्तविक त्रुटि के बजाय टाइमआउट हुआ है तो नीचे दिए गए कोड का उपयोग करें।

var request = $.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: function() { }, 
    timeout: 2000 
}).fail(function(xhr, status) { 
    if(status == "timeout") { 
     // do stuff in case of timeout 
    } 
}); 
+0

समस्या नहीं होगी: '==' ' = ' – noahnu

+0

@noahnu धन्यवाद। ठीक कर दिया। – Bruno

3

वहाँ हमेशा परमाणु मार्ग के रूप में अच्छी तरह से है:

//Set AJAX timeout to 10 seconds 
$.ajaxSetup({ 
    timeout: 10*1000 
}); 

यह सेट हो जाएगा सब AJAX अनुरोध करता है अपने कार्यक्रम बनाता है ($ .getJSON के माध्यम से भी) 10 सेकंड के बाहर एक समय के लिए (या क्या क्या तुम)।

+0

मैंने 1) $ .getJSON का उपयोग करके यूआरएल और 2) $ .ajax केवल 'url' और 'dataType' विशेषताओं के साथ प्रयोग किया है। $ .ajax वैश्विक टाइमआउट (मेरे स्थानीय सर्वर पर थ्रेड नींद फ़िल्टर का उपयोग करके सेट) का सम्मान करता है, और $ .getJSON नहीं करता है। ऐसा लगता है कि यह $ .getJSON में एक बग हो सकता है। – Jasman

0

मुझे नहीं लगता कि इन उत्तरों के किसी भी आदर्श हैं है। मैं जानता हूँ कि इस साल देर हो चुकी है, लेकिन क्या आप क्या करना चाहते .ajax(); विधि की सफलता/त्रुटि कॉलबैक विकल्पों का उपयोग जब एक JSONP प्रतिक्रिया प्राप्त है।

मैं यह कैसे संरचना होगा का उदाहरण:

// Call 
    $.ajax({ 

     // URL you want to get 
     url: 'http://example.com/json?callback=?', 

     // Set a realistic time in milliseconds 
     timeout: 3000, 

     // Put in success callback function here, this example 
     // shows you the data you got back from the call 
     success: function(data) { 
     console.log(data); 
     }, 

     // Put in an error handling function, just an alert in this case 
     error: function(badData) { 
     alert('The call was unsuccessful'); 
     }, 

     type: 'POST' 
    }); 
संबंधित मुद्दे