jQuery আজাক্স ত্রুটি ফাংশন


130

আমার কাছে একটি পৃষ্ঠায় একটি এজাক্স কল পাসিং ডেটা রয়েছে যা তার পরে একটি মান দেয়।

আমি পৃষ্ঠাটি থেকে সফল কলটি পুনরুদ্ধার করেছি তবে আমি এটিকে কোড করে দিয়েছি যাতে এটি এসপির মধ্যে একটি ত্রুটি উত্থাপন করে। আমি কীভাবে ত্রুটিটি পুনরুদ্ধার করব?

উদাহরণ স্বরূপ:

cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
    alert('successful : ' + html);
    $("#result").html("Successful");
},
error: function (error) {
    **alert('error; ' + eval(error));**
}

এটি ত্রুটি বিট যা আমি বুঝতে পারি না। ফাংশনে আমার কী পরামিতি লাগানো দরকার, যাতে আমি তখন সার্ভারে উত্থাপিত ত্রুটি বার্তাটি ব্যবহার করতে পারি ।


সেখানে একটি টাইপো আছে: তা dataTypeনয় datatype
আলেজান্দ্রো নাভা


7
@ আলেজ27: শব্দটি একজাতীয় মতামত, তবে এটি আপনি দুটোই ব্যবহার করতে পারবেন না বলে মন্তব্য করে, এটি বলে একটি অনুরোধ সাফল্য এবং ত্রুটি বলে না (কারণ তারা পারস্পরিক একচেটিয়া)।
মার্টি ভ্যান্স

এখানে উত্তর সহ যত্ন ব্যবহার করুন jQuery 3.0 হিসাবে অবহেলিত হিসাবে উল্লেখ করা হয়েছে .errorএবং .successসেগুলি সরানো হওয়ায় আরও গুরুত্বপূর্ণ হয়ে উঠেছে।
মার্ক স্কুলথিস

উত্তর:


221

একটি অ্যাজাক্স errorফাংশনে প্রয়োজনীয় প্যারামিটারগুলি হ'ল jqXHR, exceptionএবং আপনি নীচের মত এটি ব্যবহার করতে পারেন:

$.ajax({
    url: 'some_unknown_page.html',
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

ডেমো FIDDLE


পরামিতি

jqXHR:

এটি আসলে একটি ত্রুটিযুক্ত বস্তু যা দেখতে এটির মতো দেখাচ্ছে

আজাক্স ত্রুটি jqXHR অবজেক্ট

আপনি নিজের ব্রাউজার কনসোলে এগুলি যেমন ফাংশনটির console.logঅভ্যন্তরে ব্যবহার করে তা errorদেখতে পারেন:

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}

আমরা statusএই বস্তুটি থেকে ত্রুটি কোডটি পেতে সম্পত্তিটি ব্যবহার করছি, যেমন যদি আমরা স্থিতি পাই = ৪০৪ এর অর্থ এই যে অনুরোধ করা পৃষ্ঠাটি পাওয়া যায়নি। এটি মোটেই বিদ্যমান নেই। সেই স্থিতির কোডের ভিত্তিতে আমরা ব্যবহারকারীদের লগইন পৃষ্ঠাতে বা আমাদের ব্যবসায়িক যুক্তির জন্য যা প্রয়োজন তা পুনর্নির্দেশ করতে পারি।

ব্যতিক্রম:

এটি স্ট্রিং ভেরিয়েবল যা ব্যতিক্রম প্রকারটি দেখায়। সুতরাং, যদি আমরা 404 ত্রুটি পেয়ে থাকি তবে exceptionপাঠ্যটি কেবল 'ত্রুটি' হবে। একইভাবে, আমরা অন্যান্য ব্যতিক্রম পাঠ্য হিসাবে 'টাইমআউট', 'গর্ভপাত' পেতে পারি।


অসমর্থনের বিজ্ঞপ্তি:jqXHR.success() , jqXHR.error(), এবং jqXHR.complete()callbacks jQuery এর 1.8 এ অনুমোদিত হয়। তাদের পরিণামস্বরূপ অপসারণের জন্য আপনার কোড প্রস্তুত করতে, jqXHR.done(), jqXHR.fail(), এবং jqXHR.always()পরিবর্তে।

সুতরাং, আপনি jQuery 1.8 বা তার বেশি ব্যবহার করছেন সে ক্ষেত্রে আমাদের সাফল্য এবং ত্রুটির ফাংশন যুক্তি আপডেট করার প্রয়োজন হবে: -

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
    .done(function (response) {
        // success logic here
        $('#post').html(response.responseText);
    })
    .fail(function (jqXHR, exception) {
        // Our error logic here
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    })
    .always(function () {
        alert("complete");
    });

আশা করি এটা সাহায্য করবে!


6
মজার বিষয় হল এটি আজাক্সেটআপ ব্যবহার করার পরামর্শ দেওয়া হয় না। দেখুন api.jquery.com/jquery.ajaxsetup
SleepyBoBos

1
@ পালা - আমি মনে করি আপনি অবচয়ের বিজ্ঞপ্তিটি ভুলভাবে লিখেছেন। আপনি যদি লক্ষ্য করেন, অবমূল্যায়ন বিজ্ঞপ্তিটি jqXHR এর পদ্ধতিগুলির অবমূল্যায়নের কথা বলছে, তবে আপনার উপরের উদাহরণে সাফল্য, ত্রুটি এবং সম্পূর্ণরূপে ব্যবহার $ .জ্যাক্স পদ্ধতিতে কোনও বস্তুর মধ্যে করা হয়। এটি অবহেলা করা হয়নি এবং আপনার কোড পরিবর্তন করতে হবে না to যাইহোক, যদি কেউ পদ্ধতিগুলি শৃঙ্খল করতে পছন্দ করে তবে আপনি এই স্টাইলটি ব্যবহার করতে পারেন। আমি যখন "অবচয় ..." পড়ি তখন এটি আমাকে ছাড়িয়ে দেয় (কোনও কারণ ছাড়াই)। :-)
bchr02

JQuery 3.0 হিসাবে অবহেলিত হিসাবে উল্লেখ করা হয়েছে .errorএবং .successসেগুলি সরানো হওয়ার সাথে সাথে আরও গুরুত্বপূর্ণ হয়ে উঠেছে
মার্ক স্কুলথিস

99

এটা চেষ্টা কর:

error: function(jqXHR, textStatus, errorThrown) {
  console.log(textStatus, errorThrown);
}

যদি আপনি আপনার সীমানা বৈধতা সংক্রান্ত ত্রুটি সম্পর্কে অবহিত করতে চান তবে জসনকে ফেরত দেওয়ার চেষ্টা করুন:

dataType: 'json',
success: function(data, textStatus, jqXHR) {
   console.log(data.error);
}

আপনার এসপি স্ক্রিপ্ট ফিরে আসবে:

{"error": true}

1
টেক্সটস্টাস এবং ত্রুটিটি কী জন্য রয়েছে? আপনি দয়া করে ব্যাখ্যা করতে পারেন
অন্নপূর্ণা

4

এখানে আপনি কীভাবে এএসপি ত্রুটি টানছেন।

              cache: false,
              url: "addInterview_Code.asp",
              type: "POST",
              datatype: "text",
              data: strData,
              success: function (html) {
                  alert('successful : ' + html);
                  $("#result").html("Successful");
              },
              error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }

2
error(jqXHR, textStatus, errorThrown)

http://api.jquery.com/jQuery.ajax/


9
দয়া করে কিছু সংখ্যক ব্যাখ্যা সরবরাহ করুন, কেবলমাত্র একটি কোডের টুকরা এবং ডক্স ডক্স নয়।
গ্রেগ দুবিকি

12
প্রায় কিছুই করার জন্য আপনাকে ধন্যবাদ।
জুডাসনে

উদাহরণস্বরূপ, আপনি বলতে পারতেন "ওপি একটি ফাংশন ত্রুটি (ত্রুটি) ব্যবহার করছে তবে জ্যাকুয়ারি একটি ফাংশন ত্রুটি (jqXHR, টেক্সটস্ট্যাটাস, ত্রুটি ট্রাউন) কল করছে OP
অবিশ্বাস্যভাবে

2
          cache: false,
          url: "addInterview_Code.asp",
          type: "POST",
          datatype: "text",
          data: strData,
          success: function (html) {
              alert('successful : ' + html);
              $("#result").html("Successful");
          },
          error: function(data, errorThrown)
          {
              alert('request failed :'+errorThrown);
          }

2

আপনি একটি ফাংশন ব্যবহার করছেন

error(error) 

তবে jquery আসলে তিনটি পরামিতি সহ একটি ফাংশন সন্ধান করছে:

error(jqXHR, textStatus, errorThrown)

আপনাকে আরও দুটি পরামিতি যুক্ত করতে হবে।

এছাড়াও: দয়া করে উপরে উল্লিখিত সমস্ত মন্তব্যগুলি একবার দেখুন: 'অবচয়' উল্লেখ করেছেন :)

$.ajax("www.stackoverflow.com/api/whatever", {
    dataType:"JSON"
    data: { id=1, name='example' }
}).succes(function (result) {
    // use result
}).error(function (jqXHR, textStatus, errorThrown) {
    // handle error
});

4
আপনাকে আরও দুটি পরামিতি যুক্ত করতে হবে - এটি এত ভুল।
বিকাশকারী

1
হুম। যদি আপনাকে এতটুকু বলতে হয় - তবে কিছু বলবেন না? অথবা, আপনি আপনার বিবৃতিটি ব্যাখ্যা করতে এবং বাস্তবে সহায়তা করতে পারেন। তোমার পছন্দ.
অবিশ্বাস্যভাবে

1
জাভাস্ক্রিপ্টে, বলুন যে আপনার একটি পদ্ধতি রয়েছে - function myMethod (err) { alert(err); }এবং তারপরে এটিকে কল করুন myMethod ("something is wrong", 500, some_object)- এটি কোনও সমস্যা ছাড়াই কাজ করবে। আপনার বিবৃতি অনুসারে, পদ্ধতিটির স্বাক্ষর থাকলে কেবল এটিই কাজ করবে function myMethod (err, status, some_object)। উপরের উদাহরণটি ভুলে যান, successউত্তরে আপনার যে ইভেন্টটি রয়েছে তার স্বাক্ষরটি আসলে .success(data, status, xhr), তবে যদি আপনাকে কেবল ফলাফলের প্রয়োজন হয় তবে আমরা সাধারণত এটির মতো আবদ্ধ করি .success (data)এবং উভয়ই কাজ করে।
বিকাশকারী

এবং এই উত্তরটি যুক্ত করে আপনি কোন মান যুক্ত করেছেন? IMO আপনার উত্তরের কোনও তথ্য নেই যা পূর্ববর্তী উত্তরে অনুপস্থিত ছিল। কেবলমাত্র আপনি যা করেছেন তা এই প্রশ্নটিকে আবার স্ট্যাকের মধ্যে টানছিল।
বিকাশকারী

0

Jquery.com থেকে:

The jqXHR.success(), jqXHR.error(), and jqXHR.complete()
callback methods introduced injQuery 1.5 are deprecated
as of jQuery 1.8. To prepare your code for their eventual 
removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

আপনি যদি বিশ্বব্যাপী হ্যান্ডলারগুলি চান তবে আপনি এটি ব্যবহার করতে পারেন:

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