আমার কি সাফল্য এবং ত্রুটির পরিবর্তে নতুন jQuery AJAX কোডের জন্য .done () এবং .fail () ব্যবহার করা উচিত?


166

আমি এই মত কোডিং করেছি:

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

তবে আমি যখন jQuery .ajax()ডকুমেন্টেশনটি শেষে দেখি তখন মনে হয় আমার নীচের মতো কোডিং করা উচিত বা কমপক্ষে এটি একটি .done()এবং একটি যুক্ত করার পরামর্শ দেয় .fail():

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

হালনাগাদ

যদি আমি এর মতো কোড করি তবে এটি কি একই বা এটি তিনটি ভাঙার কোনও সুবিধা আছে?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});

উত্তর:


164

যেমন ব্যবহারকারীর 24246674 দ্বারা বলা হয়েছে, এজ্যাক্স ফাংশনের প্যারামিটার ব্যবহার successএবং errorহিসাবে এটি বৈধ।

পূর্ববর্তী উত্তরের সাথে সামঞ্জস্য রাখতে ডকটি পড়া:

অবহেলা বিজ্ঞপ্তি :

JqXHR.success (), jqXHR.error (), এবং jqXHR.complete () কলব্যাকগুলি jQuery 1.8 এ অবমুক্ত করা হবে। আপনার কোডটি তাদের পরিণামে অপসারণের জন্য প্রস্তুত করার জন্য, পরিবর্তে jqXHR.done (), jqXHR.fail () এবং jqXHR.always () ব্যবহার করুন।

যদি আপনি কলব্যাক-ম্যানিপুলেশন ফাংশনটি ব্যবহার করেন (উদাহরণস্বরূপ পদ্ধতি-চেইন ব্যবহার করে) .done(), .fail()এবং এর .always()পরিবর্তে success(), error()এবং complete()


54
আমি একমত নই সম্পর্কে রেফারেন্স আলোচনা কলব্যাক-ম্যানিপুলেশন ফাংশন (যেমন .error, .success) যা করছে আরো সার্বজনীন বিলম্বিত প্যাটার্ন পক্ষে অবচিত কিন্তু প্যারামিটার ajaxপদ্ধতি অবচিত হয় না এবং উভয় বৈধ এবং গ্রহণযোগ্য - jQuery এর 1.9 / 2.0 এমনকি! সমস্ত বর্তমান ফর্মগুলিতে, ajaxএখনও একটি স্থগিত ফেরত; সম্ভবত ইতিমধ্যে সংযুক্ত ডিফার্ড কলব্যাক্স সহ।
ব্যবহারকারী2246674

1
এটি এখানে, jQuery 1.9 এবং সাফল্য:, ত্রুটি :, এবং সম্পূর্ণ: এখনও ব্যবহারযোগ্য। তবে আমার প্রশ্নটি হল, .done () == সাফল্যে:?
তারকাস

3
JQuery 1.10 সোর্স কোড থেকে @GregoryLewis: jqXHR.success = jqXHR.done;
মাইকেল লাফারগু

9
আমি ভাল পছন্দ success, fail, always
আহ্নবিজক্যাড

4
বাহ, আমি ডকুমেন্টেশনটিও ভুলভাবে পড়েছি। আমি আক্ষরিকভাবে ভেবেছিলাম success .জ্যাক্সের জন্য 'সাফল্য' / 'ত্রুটি' বিকল্পগুলি 'সম্পন্ন / ব্যর্থ' এ পুনরায় লেখা হয়েছিল। এটি কেবল কলব্যাক পদ্ধতির চেইন ছিল। সত্যিই, আমি মনে করি তাদের পাশাপাশি বিকল্পগুলির নামও পরিবর্তন করা উচিত ছিল। এটি আমাকে কয়েক ঘন্টা ধরে স্ট্যাম্প করে রেখেছিল।
ওজজি দ্যজেন্ট

12

আমি @ মিশেল লাফারগু পোস্টটিতে কিছু যুক্ত করতে চাই:

jqXHR.done() দ্রুততর!

jqXHR.success()কলব্যাকের কিছু লোড সময় থাকতে পারে এবং কখনও কখনও স্ক্রিপ্টকে ওভারকিল করতে পারে। আমি এটি আগে কঠিন পথে খুঁজে পেয়েছি।

হালনাগাদ:

ব্যবহার jqXHR.done(), jqXHR.fail()এবং jqXHR.always()আপনি ভাল Ajax অনুরোধ নিপূণভাবে পারবেন না। সাধারণভাবে আপনি কিছু পরিবর্তনশীল বা অবজেক্টে এজাক্স সংজ্ঞায়িত করতে পারেন এবং আপনার কোডের যে কোনও অংশে সেই পরিবর্তনশীল বা অবজেক্টটি ব্যবহার করতে পারেন এবং দ্রুত ডেটা পেতে পারেন। ভালো উদাহরণ:

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});

9
আপনার কি কোনও বিশ্বাসযোগ্য এবং যাচাইযোগ্য রেফারেন্স রয়েছে?
পল ভার্গাস

@ পোলবার্গাস আমি কখনই কিছু পারফরম্যান্স পরীক্ষা করি না তবে আমার অনুশীলনে আমি এটি কাজ করতে পারি। আপনি নিজে চেষ্টা করে দেখতে পারেন
আইভিজন স্টেফান স্টিপিয়াস

1
বিশ্বাসযোগ্য এমন কোনও প্রমাণ দিন।
wonsuc

আপনারা জানেন যে, ফাংশন থেকে কিছু বস্তুর ফেরতের তুলনায় কলব্যাক ফাংশনগুলি ধীরে ধীরে। কখনও কখনও ছোট প্রভাব হয় তবে কখনও কখনও আপনার কাছে অনেকগুলি কল থাকলে বিশাল হতে পারে।
আইভিজন স্টিফান স্টিপিয়াস

7

সহজ কথায়

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

যদি এটি তথ্য.টেক্সট পায় তবে এটি সতর্কতা অবলম্বন করবে এবং আপনি যে কোনও ফাংশন যুক্ত করবেন বা সার্ভার থেকে তথ্য.টেক্সট পুনরুদ্ধার করতে যদি কোনওভাবেই অক্ষম থাকে তবে সতর্কতা বা ত্রুটি ফাংশন।


0

যখন আমরা আমাদের পুরানো বিদ্যমান অ্যাপ্লিকেশনটিতে জিকুয়েরিকে 1.x থেকে 2x বা 3.x এ স্থানান্তর করতে যাব, তখন আমরা সাফল্যের পরিবর্তে .done, .fail ব্যবহার করব, JQuery আপ গ্রেডেশন হিসাবে এই পদ্ধতিগুলি অবনতিহীন হবে ত্রুটি উদাহরণস্বরূপ, যখন আমরা সার্ভার ওয়েব পদ্ধতিতে কল করি তখন সার্ভার কল করার পদ্ধতিগুলিতে প্রতিশ্রুতিবদ্ধ অবজেক্টগুলি (অ্যাজাক্স পদ্ধতিগুলি) ফেরত দেয় এবং এই প্রতিশ্রুতিযুক্ত অবজেক্টগুলিতে থাকে .ডোন, .ফেইল..ইটিসি পদ্ধতিসমূহ। আমরা সাফল্য এবং ব্যর্থতার প্রতিক্রিয়াটির জন্য একই করব will নীচে উদাহরণটি রয়েছে (এটি জিইটি এর মতো অনুরোধের জন্য আমরা যেমন অনুরোধের জন্য তৈরি করতে পারি ঠিক তেমন অনুরোধের জন্য ...)

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.