2011-11-06 8 views
9
$.ajax("example.php").done(function() 
{ 
    alert(...); 
}).fail(function() 
{ 
    alert(...); 
}).always(function() 
{ 
     alert(...); 
}); 

बनामjQuery डिफर्ड फायदे?

$.ajax("example.php", 

     success: function() 
     { 
      alert(''); 
     }, 
     error: function() 
     { 
      alert(''); 
     }, 
     complete: function() 
     { 
      alert(''); 
     } 
); 

क्षमा करें, मैं किसी भी फायदे

आप कृपया व्याख्या कर सकते हैं नहीं देख सकते हैं?

या शायद आप मुझे उदाहरण के उदाहरण दे सकते हैं जो बाद वाले द्वारा पूरा नहीं किया जा सकता ...?

+2

शग ... मुझे लगता है कि पूर्व में कुछ और अधिक jQuery-y महसूस कर सकते हैं। मुझे नहीं लगता कि यहां एक स्टाइलिस्ट लाभ से अधिक है। –

उत्तर

5

स्टार्टर्स के लिए, दूसरा कोड ब्लॉक भी वाक्य रचनात्मक रूप से मान्य नहीं है। मैं फोन करता हूँ कि पहले :P


लेकिन सभी गंभीरता में की एक फायदा:

यह वही अंतिम परिणाम प्राप्त करने के लिए सिर्फ एक अलग वाक्य रचना है।

function done1() 
{ 
    alert('success 1'); 
} 
function done2() 
{ 
    alert('success 2'); 
} 

$.ajax('example.php', 
{ 
    success: function() 
    { 
     done1.apply(this, arguments); 
     done2.apply(this, arguments); 
    } 
}); 

अन्य लाभों में, से उद्धृत:

$.get("example.php").done(function() 
{ 
    alert("success 1"); 
}).done(function() 
{ 
    alert("success 2"); 
}); 

अन्यथा तुम इतनी तरह यह करने के लिए होगा: एक तत्काल लाभ यह है कि आप आस्थगित साथ प्रत्येक परिणाम के लिए कई कार्यों को तार कर सकते हैं How can jQuery deferred be used?

  • Deferreds जब टी के लिए परिपूर्ण हैं वह कार्य असीमित रूप से काम कर सकता है या नहीं कर सकता है, और आप उस शर्त को कोड से बाहर करना चाहते हैं।
  • ... एकाधिक स्रोतों से डेटा प्राप्त करना। नीचे दिए गए उदाहरण में, मैं एक क्लाइंट और एक आरईएसटी सर्वर के बीच सत्यापन के लिए मौजूदा अनुप्रयोग में उपयोग की जाने वाली एकाधिक, स्वतंत्र JSON स्कीमा ऑब्जेक्ट्स ला रहा हूं। इस मामले में, मैं नहीं चाहता कि ब्राउजर-साइड एप्लिकेशन सभी स्कीमा लोड होने से पहले डेटा लोड करना शुरू कर दे। $ .when.apply()। तब() इसके लिए सही है।
  • एक स्थगित म्यूटेक्स के स्थान पर उपयोग किया जा सकता है। यह अनिवार्य रूप से एकाधिक AJAX उपयोग परिदृश्यों के समान है।
+0

अभी भी कोई अंतर देखने के लिए मुश्किल है। जब से मैं "example.php" चला रहा हूं, मैं एक उत्तर (सफलता या कभी नहीं किया गया) की प्रतीक्षा कर रहा हूं। मैं फायदे के कुछ कठिन विकास की तलाश में हूं ... :) –

+1

प्रशंसक मामलों के लिए मेरा संपादन देखें। स्थगित एपीआई पसंद नहीं है? इसका इस्तेमाल न करें। –

+1

मैंने अभी http://stackoverflow.com/questions/4869609/how-can-jquery-deferred-be-used और इस लाइन 'रिटर्न कैश [वैल] || से उदाहरण देखा है। $ .ajax ('/ foo /', ... 'मुझे एहसास हुआ कि मैं कॉलबैक समारोह में' कब 'का उपयोग कर सकता हूं ** REGARDLESS ** प्रतिक्रिया जो कैश से या AJAX कॉल से हो सकती है ... अच्छा। धन्यवाद आप –

4

मैं कहूंगा कि स्थगित वस्तुएं jQuery के विकास में एक और कदम हैं।

उनके सामने, कॉन्फ़िगरेशन ऑब्जेक्ट में कॉलबैक को $.ajax पर पास करना संभव था। Deferrds होने के बाद, अब आप उनके साथ सभी एसिंक्रोनस या यहां तक ​​कि तुल्यकालिक निष्पादन को संभाल सकते हैं, जो एक और एकीकृत इंटरफ़ेस की ओर जाता है। यह लाभ है: सरलीकरणएकीकरण के माध्यम से।

on की शुरुआत के साथ कुछ ऐसा ही हुआ। on का bind से अधिक वास्तविक लाभ नहीं है, लेकिन यह इस अर्थ में ईवेंट हैंडलिंग को सरल बनाता है कि यह bind, live और delegate की कार्यक्षमता को जोड़ता है। नतीजा इवेंट हैंडलिंग के लिए एक एकीकृत एपीआई है। या तो मैं दो बार एक ही फ़ंक्शन का उपयोग करता हूं, on, या bind और delegate

इसी तरह, यदि मैं दो आश्रित अजाक्स कॉल करना चाहता हूं, तो मैं या तो दो $.ajax कॉल प्लस $.when का उपयोग कर सकता हूं, जो मैं परिचित हूं और एक या एकाधिक कॉल करने से अलग नहीं है, या मैं दूसरे के अंदर एक कॉल घोंसला करता हूं, जिसके लिए मुझे निष्पादन के बारे में अलग-अलग सोचने की आवश्यकता होती है।

डिफरर्ड ऑब्जेक्ट्स असीमित, सामान्य तरीका एसिंक्रोनस कोड निष्पादन के लिए हैं। इसका मतलब यह नहीं है कि कॉलबैक जोड़ने का पिछला तरीका हटा दिया जाना चाहिए, यह बहुत सारे कोड तोड़ देगा। और इसके अलावा, यह अभी भी मूल XMLHTTPRequest ऑब्जेक्ट के तरीकों के करीब है, जो कुछ लोग बस पसंद कर सकते हैं।

+0

क्या स्थगित ऑब्जेक्ट्स केवल असिनक कॉल के लिए हैं? –

+0

मुझे अभी भी आंकड़ा है जब मुझे 'कब' उदाहरणों का उपयोग करना है जो आपको उदाहरण के बिना 'फिर' करने देता है ... क्या आप समझा सकते हैं? –

+0

नहीं, यह है मैंने इसे "एसिंक्रोनस या सिंक्रोनस निष्पादन" में क्यों बदल दिया ... मैं अक्सर इसे एक असीमित तरीके से उपयोग कर रहा था और मुझे लगता है कि यह उनका मुख्य उद्देश्य है। –

1

स्थगित वस्तुओं के साथ मुख्य लाभ यह है कि आप उन्हें पास कर सकते हैं, इसलिए जटिल मामलों के लिए जहां AJAX निष्पादित कोड को पता नहीं है कि कॉलबैक में कौन दिलचस्पी है या आप इसे हार्डकोड नहीं करना चाहते हैं, यह बस पास हो सकता है इच्छुक प्लगइन्स/मॉड्यूल कोड के लिए स्थगित वस्तु।

उदा।

var defer = $.get("example.php"); 
for(var i=0; i<ajax_observers.length;i++){ 
    ajax_observers[i].hook(defer) 
} 

यही बात कॉलबैक के माध्यम से किया जा सकता है, लेकिन फिर आप पर्यवेक्षकों के कॉलबैक कार्यों पाने के लिए एक इंटरफेस लिखने के लिए होगा, और कि लचीला नहीं है, साथ आस्थगित पर्यवेक्षकों टाल वस्तुओं के साथ कुछ भी कर सकते हैं।

+0

'$ (" a ") की तरह क्लिक करें। (preExistsingfunc) '??? –

+0

ऑब्जेक्ट्स का क्या घुमाव' AJAX_observers' में है? –

+0

क्या आप हैं यहां प्लगइन्स का उपयोग कर रहे हैं? –

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