সাফল্য এবং .ডোন () পদ্ধতির মধ্যে difference .জ্যাক্সের মধ্যে পার্থক্য কী


102

আমাকে কি কেউ সাহায্য করতে পারবেন?
আমি successএবং .done()এর মধ্যে পার্থক্য বুঝতে সক্ষম নই $.ajax

সম্ভব হলে উদাহরণ দিন।


আপনি aj .Jax () এর একটি সম্পন্ন () পদ্ধতি সম্পর্কে কোথায় পড়েন? সম্পাদিত সম্পন্ন পদ্ধতিটি $। ডিফার্ড অবজেক্টের সাথে সম্পর্কিত। আপনি কি পরিবর্তে। কমপ্লিট () কথা বলছেন?
ফ্যাবরিজিও ক্যাল্ডেরান

1
উপর api.jquery.com/jQuery.ajax পৃষ্ঠা
পুনম ভাট

2
ঠিক আছে, এটি jQuery 1.8 :) যেহেতু aj .জ্যাক্স jQuery 1.5 থেকে একটি প্রতিশ্রুতি ফেরত দেয় এটি ধারাবাহিকতার কোনও কোনও ক্ষেত্রে (পিছিয়ে দেওয়া ইন্টারফেস ব্যবহার করে) জন্য একটি সহজ বিকল্প: সম্পন্ন () সাফল্যের জায়গা নেয় (), ব্যর্থ () ত্রুটির জন্য () এবং সর্বদা () সম্পূর্ণ ()
ফ্যাবরিজিও ক্যাল্ডেরান

2
আসল পরিবর্তনটি হ'ল আপনি প্রোগ্রামিয়ালি একাধিক কলব্যাক সংযুক্ত করতে পারেন। $ .নির্দিষ্ট ডকুমেন্টেশন পৃষ্ঠাটি দেখুন।
ফ্যাবরিজিও ক্যাল্ডেরান

উত্তর:


8

সংক্ষেপে, আজাক্স ফাংশন থেকে সাফল্য কলব্যাক ফাংশনটি ডিকউলিং করুন যাতে পরে আপনি মূল কোডটি (পর্যবেক্ষক প্যাটার্ন) পরিবর্তন না করে নিজের হ্যান্ডলার যুক্ত করতে পারেন।

দয়া করে এখান থেকে আরও বিশদ তথ্য পান: https://stackoverflow.com/a/14754681/1049184


1
এবং এর নীচে উদাহরণটি সম্পন্ন => সাফল্য, ব্যর্থতা => ত্রুটি এবং সর্বদা => সম্পূর্ণতার
সমতুল্যতা তৈরি করে

25
এই উত্তরটি পয়েন্টটি মিস করে। success: প্যারামিটার .success()হিসাবে এবং এ- তে একটি পদ্ধতির মধ্যে পার্থক্য রয়েছে jqXHR। দ্বিতীয়টির অবচয় করা হচ্ছে, তবে পূর্বেরটি ওপি সম্পর্কে যা জিজ্ঞাসা করেছিল।
Alnitak

2
সাফল্য / ত্রুটি / সম্পূর্ণ এজেএক্সের রাষ্ট্রীয় পরিবর্তনের উপর ভিত্তি করে অবজ্ঞাত করা হয়েছে; সম্পন্ন / ব্যর্থ / সর্বদা jQuery স্থগিত স্থিত পরিবর্তনের উপর ভিত্তি করে। Api.jquery.com/category/deferred-object দেখুন ।
mickeyreiss

28
আমি এমন উত্তরকে বিশ্বাস করতে পারি না যা প্রশ্নের ভুল ব্যাখ্যা করে সবচেয়ে বেশি ভোট দেওয়া এবং গৃহীত সমাধান উভয়ই ...
উত্তরণ

108

successশুধুমাত্র এজেএক্স কল সফল হলে আগুন জ্বলতে পারে, অর্থাৎ শেষ পর্যন্ত একটি এইচটিটিপি 200 স্থিতি ফেরত দেয়। সাফল্য নির্বিশেষে errorযদি এটি ব্যর্থ হয় এবং completeঅনুরোধটি শেষ হয়ে যায় তখন আগুন জ্বলে ওঠে।

উপর jQuery এর 1.8 ইন jqXHRবস্তু (দ্বারা ফিরে $.ajax) successপ্রতিস্থাপন করা হয়েছে done, errorসঙ্গে failএবং completeসঙ্গে always

তবে আপনার এখনও পুরানো সিনট্যাক্সের সাহায্যে AJAX অনুরোধটি শুরু করতে সক্ষম হওয়া উচিত। সুতরাং এগুলি একই রকম কাজ করে:

// set success action before making the request
$.ajax({
  url: '...',
  success: function(){
    alert('AJAX successful');
  }
});

// set success action just after starting the request
var jqxhr = $.ajax( "..." )
  .done(function() { alert("success"); });

এই পরিবর্তনটি jQuery 1.5 এর মুলতুবি বস্তুর সাথে সামঞ্জস্যের জন্য । ডিফার্ড (এবং এখন Promise, যার ক্রোম এবং এফএক্স-এ সম্পূর্ণ নেটিভ ব্রাউজার সমর্থন রয়েছে) আপনাকে অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলি শৃঙ্খলাবদ্ধ করতে দেয়:

$.ajax("parent").
    done(function(p) { return $.ajax("child/" + p.id); }).
    done(someOtherDeferredFunction).
    done(function(c) { alert("success: " + c.name); });

ফাংশনগুলির এই চেইনটি আপনার সাথে থাকা কলব্যাকের নেস্টেড পিরামিডের চেয়ে বজায় রাখা আরও সহজ success

তবে দয়া করে নোট করুন যে পরিবর্তিত বাক্য ব্যবহার করে এমন সিনট্যাক্সের doneপক্ষে এখন অবনতি হয়েছে :Promisethen

$.ajax("parent").
    then(function(p) { return $.ajax("child/" + p.id); }).
    then(someOtherDeferredFunction).
    then(function(c) { alert("success: " + c.name); }).
    catch(function(err) { alert("error: " + err.message); });

এটি গ্রহণ করার উপযুক্ত কারণ উন্নত বাক্য গঠন (এবং ত্রুটি পরিচালনার) প্রতিশ্রুতি asyncএবং awaitপ্রসারিত:

try {
    var p = await $.ajax("parent");
    var x = await $.ajax("child/" + p.id);
    var c = await someOtherDeferredFunction(x);
    alert("success: " + c.name);
}
catch(err) { 
    alert("error: " + err.message); 
}

অনুরোধ করার আগে ফাংশন সৃষ্টি, এবং অনুরোধ করার পরে ফাংশন সেট করুন। দেখে মনে হচ্ছে দুটোই এক রকম ... তুমি কি আমাকে অন্যরকম পার্থক্য দেখাবে ???
suhailvs

@ সুহাইল - সত্যিই কিছু নেই; jQuery 1.6 এ success, jQuery 1.8 এ প্রতিস্থাপন করা হয়েছে done। তারা একইভাবে কাজ করে, তবে doneবাকি jQuery এর সাথে আরও সুসংগত।
কিথ

@ কিথ আজ এত দিন, .done ব্যবহার করা কি সাফল্য ব্যবহারের সমান? বা আরও নতুন কিছু আছে?
রক্সি'প্রো

@ রক্সি'প্রো যখন এটির উত্তর দিয়েছিলাম তখন এটি পুরানো হয়ে গিয়েছিল, আমি অবশ্যই এটি 2018 .doneসালে ব্যবহার করব না j jQuery এর প্রথম দিকে (এবং এখন মৃত-শেষ) কী হয়েছিল এবং এটিতে Promiseএখন মোটামুটি ভাষা সমর্থন রয়েছে at নতুন প্রকল্পগুলিতে আমি const response = await fetch(...)পরিবর্তে ব্যবহার করব ।
কিথ

6

.success() কেবল তখনই ডেকে আনা হয় যদি আপনার ওয়েবসার্ভার 200 ওকে এইচটিটিপি শিরোনাম দিয়ে প্রতিক্রিয়া জানায় - মূলত যখন সবকিছু ঠিক থাকে।

পিছিয়ে দেওয়া সমস্যার সমাধান হয়ে গেলে () এর সাথে সংযুক্ত কলব্যাকগুলি বরখাস্ত করা হবে। ব্যর্থ () এর সাথে সংযুক্ত কলব্যাকগুলি বরখাস্ত করা হবে যখন বিলম্বিত প্রত্যাখাত হয়।

promise.done(doneCallback).fail(failCallback)

.done() has only one callback and it is the success callback

3
এটি লক্ষণীয় যে, যখন 200 / ঠিক আছে স্থিতি কোড সহ ত্রুটিযুক্ত JSON ফেরত পাঠানো হয় তখন .success () কল হয় না। বিশেষত, আমি ওয়েবসার্ভার ব্যাকএন্ড কোডের সাথে একটি এনএনএন মান উত্পন্ন করে জাভাস্ক্রিপ্ট ন্যান হিসাবে সিরিয়ালিয়াস করেছিলাম (যেমন একটি প্রতীক হিসাবে, স্ট্রিং 'নাএন' নয়) যা আসলে বৈধ নয় জেএসএন - সুতরাং জেএসএন হিসাবে প্রতিক্রিয়াটির পার্সিং ব্যর্থ হয় এবং .fail () কার্যকর করা হয়, কিন্তু প্রতিক্রিয়া স্থিতি 200 হয়। তবে এটি এখনও সত্য যে সাফল্য কেবল একটি ওকে স্থিতি কোডের সাথে ডাকে; কেবল এটি চিহ্নিত করতে চেয়েছিলেন যে এটি ঠিক আছে, এর অর্থ এটি 'সাফল্যবান' নয়;)
কাসাপো

1

successঅনুরোধটি সফল হওয়ার পরে এবং $.ajaxকলটির অংশ হয়ে থাকে এমন কলব্যাকটি হয়। doneপ্রকৃতপক্ষে jqXHRপ্রত্যাবর্তিত অবজেক্টের অংশ $.ajax(), এবং successjQuery 1.8 এ প্রতিস্থাপন করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.