আমি কীভাবে একটি আজাক্স ক্যোয়ারী পোস্ট ত্রুটি ধরব?


209

আমি ত্রুটিটি ধরতে চাই এবং এজাক্স অনুরোধটি ব্যর্থ হলে যথাযথ বার্তাটি প্রদর্শন করতে চাই।

আমার কোডটি নীচের মত, তবে আমি ব্যর্থ অ্যাজাক্স অনুরোধটি ধরতে পারি না।

function getAjaxData(id)
{
     $.post("status.ajax.php", {deviceId : id}, function(data){

        var tab1;

        if (data.length>0) {
            tab1 = data;
        }
        else {
            tab1 = "Error in Ajax";
        }

        return tab1;
    });
}

আমি জানতে পেরেছি যে, আজাক্স অনুরোধটি ব্যর্থ হলে "ত্রুটি ইন অ্যাজ্যাক্স" কখনই কার্যকর হয় না।

আমি কীভাবে অ্যাজাক্স ত্রুটিটি পরিচালনা করব এবং যদি এটি ব্যর্থ হয় তবে উপযুক্ত বার্তাটি প্রদর্শন করব?

উত্তর:


304

যেহেতু jQuery 1.5 আপনি মুলতুবি বস্তু প্রক্রিয়া ব্যবহার করতে পারেন:

$.post('some.php', {name: 'John'})
    .done(function(msg){  })
    .fail(function(xhr, status, error) {
        // error handling
    });

আর একটি উপায় ব্যবহার করা হচ্ছে .ajax:

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston",
  success: function(msg){
        alert( "Data Saved: " + msg );
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
     alert("some error");
  }
});

14
@ ইয়াক $। পোষ্ট স্থগিত বস্তু ব্যবহার করে ত্রুটি কলব্যাক গ্রহণ করতে পারে। উদাহরণের জন্য নীচে আমার উত্তরটি দেখুন।
মাইকেল ভেনেবল

2
এছাড়াও, আমি $.ajaxআরও পঠনযোগ্য করার উপায় হ'ল আপনার জন্য একটি হ্যাশ ব্যবহার করা data। উদাহরণস্বরূপ:{ name : 'John', location: 'Boston' }
বিরিয়াঙ্গনজালেজ

3
উপরের সাফল্য এবং ত্রুটি কলব্যাকগুলি jQuery 1.8 হিসাবে অপ্রচলিত api.jquery.com/jQuery.post
বাল্ডি


288

jQuery 1.5 যোগ করা স্থগিত করা বস্তু যা এটিকে দুর্দান্তভাবে পরিচালনা করে। কল করার $.postপরে আপনি যে কোনও হ্যান্ডলারের পছন্দ করেন তা কেবল কল করুন এবং সংযুক্ত করুন। ডিফার্ড অবজেক্টস এমনকি আপনাকে একাধিক সাফল্য এবং ত্রুটি হ্যান্ডলার সংযুক্ত করতে দেয়।

উদাহরণ:

$.post('status.ajax.php', {deviceId: id})
    .done( function(msg) { ... } )
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
    });

JQuery এর 1.8 এর আগে, ফাংশন doneবলা হয় successএবং failবলা হয় error


3
+1 খুব সুন্দর, তবে সিনট্যাক্স সম্পর্কে এখনও উন্মাদ নয়। আশা করি এটি ভবিষ্যতে প্রকাশে একীভূত হবে।
ইয়াক

25
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। বর্তমান গৃহীত উত্তর হ'ল "একটি ভিন্ন পদ্ধতি ব্যবহার করুন"; এই উত্তরটি বলে "আপনার পদ্ধতিটি কীভাবে কাজ করা যায় তা এখানে"। পরেরটি সাধারণত এসওতে পছন্দ করা হয়। আসলে, এটি this। পোস্টের ডকুমেন্টেশনে অন্তর্ভুক্ত করা উচিত !!!
মার্ক ই। হাজেস

2
api.jquery.com/deferred.fail , api.jquery.com/deferred.done ডকুমেন্টেশনের জন্য
ডিলিপ্লেস

যাইহোক, এখানে responseJSONসম্পত্তি রয়েছে যা এজ্যাক্স টাইপের ক্ষেত্রেও খুব সহজ json
ivkremer

91
$.ajax({
  type: 'POST',
  url: 'status.ajax.php',
  data: {
     deviceId: id
  },
  success: function(data){
     // your code from above
  },
  error: function(xhr, textStatus, error){
      console.log(xhr.statusText);
      console.log(textStatus);
      console.log(error);
  }
});

15
$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });

5
এখানে আরও কিছু ব্যাখ্যা যুক্ত করা ভবিষ্যতের পাঠকদের সহায়তা করবে।
এরিক ব্রাউন

13

একটি সহজ উপায় হল আজাক্সেরর বাস্তবায়ন :

যখনই কোনও অজাক্স অনুরোধ ত্রুটির সাথে সম্পূর্ণ হয়, jQuery অজেক্সআরর ইভেন্টটি ট্রিগার করে। .AjaxError () পদ্ধতিতে নিবন্ধিত হওয়া যে কোনও এবং সমস্ত হ্যান্ডলারগুলি এই সময়ে কার্যকর করা হয় uted

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

$('.log').ajaxError(function() {
  $(this).text('Triggered ajaxError handler.');
});

আমি এজাক্সরর ডকুমেন্টেশন পড়ার পরামর্শ দেব । এটি উপরে প্রদর্শিত সাধারণ ব্যবহারের চেয়ে বেশি কিছু করে - মূলত এটির কলব্যাক বেশ কয়েকটি পরামিতি গ্রহণ করে:

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});

1
+1 - আমি যুক্ত করব যে এই হ্যান্ডলারটি বেশ কিছু যুক্তি পায়, যাতে আপনি প্রকৃত ত্রুটি, প্রতিক্রিয়া কোড, ইউআরএল ইত্যাদি প্রদর্শন করতে পারেন
নিক ক্র্যাভার

নোট করুন যে jQuery 1.8 হিসাবে, .ajaxError () পদ্ধতিটি কেবলমাত্র নথির সাথে সংযুক্ত থাকা উচিত।
নানকি

0

আপনাকে প্রতিক্রিয়াটি লগ করতে হবে

$.ajax({
    type: 'POST',
    url: 'status.ajax.php',
    data: {
    deviceId: id
  }
})
.done(
 function (data) {
  //your code
 }
)
.fail(function (data) {
      console.log( "Ajax failed: " + data['responseText'] );
})

0

আপনি আজরাক্স বস্তুর সাথে .অরররর হ্যান্ডলারটি সংযুক্ত করেন, কেন ভ্যানিলা ক্রস প্ল্যাটফর্ম কাজ করার সময় লোকেরা প্রতিক্রিয়ার জন্য JQuery পোস্ট করার জন্য জোর দেয় ...

দ্রুত উদাহরণ:

ajax = new XMLHttpRequest();
ajax.open( "POST", "/url/to/handler.php", true );
ajax.onerror = function(){
    alert("Oops! Something went wrong...");
}
ajax.send(someWebFormToken );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.