successআজম্যাক্স কল হিসাবে একটি বিকল্প হিসাবে সংজ্ঞায়িত jQuery এর সাফল্য কলব্যাকের চিরাচরিত নাম। যাইহোক, যেহেতু $.Deferredsআরও বেশি পরিশীলিত কলব্যাক doneবাস্তবায়ন এবং সাফল্য কলব্যাকগুলি বাস্তবায়নের জন্য পছন্দসই উপায়, কারণ এটি যে কোনওটিকেই বলা যেতে পারে deferred।
উদাহরণস্বরূপ, সাফল্য:
$.ajax({
url: '/',
success: function(data) {}
});
উদাহরণস্বরূপ, সম্পন্ন:
$.ajax({url: '/'}).done(function(data) {});
সুন্দর জিনিসটি doneহ'ল এর রিটার্ন মান $.ajaxএখন একটি মুলতুবি প্রতিশ্রুতি যা আপনার আবেদনের অন্য কোথাও আবদ্ধ হতে পারে। সুতরাং আসুন আমরা কিছু আলাদা জায়গা থেকে এই এজাক্স কল করতে চান তা যাক। বরং ফাংশন এই Ajax কল করে তোলে করার জন্য একটি বিকল্প হিসেবে আপনার সাফল্য ফাংশনে ক্ষণস্থায়ী চেয়ে, আপনি শুধু ফাংশন রিটার্ন থাকতে পারে $.ajaxনিজেই এবং বাঁধুন সঙ্গে আপনার callbacks done, fail, then, অথবা যা খুশি। দ্রষ্টব্য যে alwaysএকটি কলব্যাক যা অনুরোধটি সফল হয় বা ব্যর্থ হয় কিনা তা চলবে। doneশুধুমাত্র সাফল্যের উপর ট্রিগার করা হবে।
উদাহরণ স্বরূপ:
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json',
beforeSend: showLoadingImgFn
})
.always(function() {
// remove loading image maybe
})
.fail(function() {
// handle request failures
});
}
xhr_get('/index').done(function(data) {
// do stuff with index data
});
xhr_get('/id').done(function(data) {
// do stuff with id data
});
রক্ষণাবেক্ষণের ক্ষেত্রে এটির একটি গুরুত্বপূর্ণ সুবিধা হ'ল আপনি একটি অ্যাপ্লিকেশন-নির্দিষ্ট ফাংশনে আপনার এজাক্স প্রক্রিয়াটি আবদ্ধ করেছেন। আপনি যদি সিদ্ধান্ত $.ajaxনেন যে ভবিষ্যতে আপনার কলটি আলাদাভাবে পরিচালনা করতে হবে, বা আপনি একটি আলাদা এজ্যাক্স পদ্ধতি ব্যবহার করেন, বা আপনি jQuery থেকে দূরে সরে গেছেন, আপনাকে কেবলমাত্র xhr_getসংজ্ঞাটি পরিবর্তন করতে হবে (প্রতিশ্রুতি ফেরানোর বিষয়ে নিশ্চিত হওয়া বা কমপক্ষে কোনও doneপদ্ধতি, উপরের উদাহরণের ক্ষেত্রে)। অ্যাপ্লিকেশন জুড়ে অন্যান্য সমস্ত উল্লেখ একই থাকতে পারে।
আপনি আরও অনেকগুলি (অনেক বেশি কুলার) কাজ করতে পারেন $.Deferredযার মধ্যে pipeএকটি হ'ল $.ajaxঅনুরোধটি স্বয়ংক্রিয়ভাবে সাফল্য প্রাপ্ত হয়েও সার্ভারের দ্বারা প্রতিবেদন করা একটি ত্রুটির ব্যর্থতা ট্রিগার করতে ব্যবহার করা । উদাহরণ স্বরূপ:
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json'
})
.pipe(function(data) {
return data.responseCode != 200 ?
$.Deferred().reject( data ) :
data;
})
.fail(function(data) {
if ( data.responseCode )
console.log( data.responseCode );
});
}
xhr_get('/index').done(function(data) {
// will not run if json returned from ajax has responseCode other than 200
});
$.Deferredএখানে আরও পড়ুন : http://api.jquery.com/category/deferred-object/
দ্রষ্টব্য : jQuery 1.8 হিসাবে, ঠিক একইভাবে pipeব্যবহারের পক্ষে অবমুক্ত করা হয়েছে then।
success:/.done()এর ইন্টারঅ্যাকশনগুলি সংজ্ঞায়িত করা হয়, যদি তা হয় তবে। উদাহরণস্বরূপ, আজকালsuccess:প্রথম হিসাবে কার্যকর করা হয়.done()?