GetJSON কলগুলিতে পরিচালনা করার সময় ত্রুটি


192

আপনি কীভাবে জেএসএসন কলটিতে ত্রুটিগুলি পরিচালনা করতে পারেন? আমি jsonp ব্যবহার করে ক্রস-ডোমেন স্ক্রিপ্ট পরিষেবাটি উল্লেখ করার চেষ্টা করছি, আপনি কীভাবে একটি ত্রুটি পদ্ধতি নিবন্ধন করবেন?



অজয়, কেন সঠিক উত্তর চিহ্নিত করার কথা বিবেচনা করছেন না?
আয়নিক বিজাউ

@ আয়নিকবিজাউ এখন এটি চিহ্নিত করেছে। আমি কিছুক্ষণের জন্য এর ট্র্যাকটি হারিয়েছি। শীর্ষের উত্তরটি জেএসএনপি সম্পর্কে কথা বলছে না। বেন শেলকের নির্দেশ অনুসারে, কোনও বিশ্বাসযোগ্য ত্রুটি হ্যান্ডলার যা আমি বিশ্বাস করি তা নেই ..
অজয়

উত্তর:


277

$.getJSON() নিয়মিত AJAX কলটির এক প্রকার বিমূর্ততা যেখানে আপনাকে বলতে হবে যে আপনি একটি JSON এনকোডড প্রতিক্রিয়া চান।

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

আপনি দুটি উপায়ে ত্রুটিগুলি পরিচালনা করতে পারেন: সাধারণভাবে (আপনার এজেএক্স কলগুলি তাদের কল করার আগে কনফিগার করে) বা বিশেষত (পদ্ধতি শৃঙ্খলা সহ)।

'জেনেরিক' এমন কিছু হবে:

$.ajaxSetup({
      "error":function() { alert("error");  }
});

এবং 'নির্দিষ্ট' উপায়:

$.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });

Nops! আপনি যেমন চান সেখানে যেতে পারেন। আরও বিস্তারিত সহায়তার জন্য ডক্সটি একবার দেখুন: http://api.jquery.com/jQuery.ajax
লুসিয়ানো কোস্টা

5
নোট করুন যে এর জন্য jQuery 1.5+ প্রয়োজন (এটি
ডাব্লু

24
ওপি ক্রস-সাইট সম্পর্কে বিশেষত জিজ্ঞাসা করছে যাতে JSONPমনে getJSONহয় যে এই ক্ষেত্রে error()ফাংশনটি কল করে না । আমারও একই সমস্যা হচ্ছে আমি অনুমান করি যে এটি উভয়ই পরিচালনা করা সত্ত্বেও JSONPসাধারণ AJAXকলগুলির তুলনায় সম্পূর্ণ আলাদাভাবে কীভাবে পরিচালনা করা হয় with একটি অবজেক্টের সাথে সম্পন্ন করা হয় তবে পৃষ্ঠার একটি ট্যাগ যুক্ত করে ডায়নামিকভাবে সম্পন্ন করা হয় । jQuerygetJSONJSONXMLHTTPRequestJSONP<script>HEAD
হিপ্পিট্রেইল

3
JQuery ডক বলেছেন "দ্রষ্টব্য: এই হ্যান্ডলারটি ক্রস-ডোমেন স্ক্রিপ্ট এবং জেএসএনপি অনুরোধের জন্য ডাকা হয় না।" api.jquery.com/jQuery.ajax > ত্রুটি
ওয়ানওয়ার্ল্ড

10
"JqXHR.success (), jqXHR.error (), এবং jqXHR.complete () কলব্যাক পদ্ধতিগুলি jQuery ১.৮ এ অবহিত করা হয়েছে। তাদের শেষ অপসারণের জন্য আপনার কোডটি প্রস্তুত করতে jqXHR.done (), jqXHR ব্যবহার করুন .fail (), এবং এর পরিবর্তে jqXHR.always ()। "
স্কোরুনকা ফ্রান্টিয়েক

86

কেউ লুসিয়ানোকে এই বিষয়গুলি দিয়েছেন :) আমি কেবল তার উত্তরটি পরীক্ষা করেছি - এটি একটি অনুরূপ প্রশ্ন- এবং পুরোপুরি কাজ করেছি ...

এমনকি আমি আমার 50 সেন্ট যোগ করি:

.error(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
    })

3
এটি কি ক্রস-সাইট জেএসএনপি বা একই সাইট জেএসওনের সাথে ছিল?
হিপ্পিট্রেইল

28
চমৎকার উত্তর! .Error সম্পর্কে কেবল একটি নোট: এটি jQuery 1.8 এ অবমূল্যায়ন করবে, সুতরাং .fail
আনাতোলি মিরনভ

73

এখানে আমার সংযোজন।

থেকে http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html এবং সরকারী উৎস

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

আমি এটি করেছি এবং লুসিয়োর আপডেট হওয়া কোড স্নিপেট এখানে:

$.getJSON("example.json", function() {
  alert("success");
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function() { alert('getJSON request failed! '); })
.always(function() { alert('getJSON request ended!'); });

এবং ত্রুটির বর্ণনার সাথে সাথে সমস্ত জসন ডেটা স্ট্রিং হিসাবে দেখানো হচ্ছে:

$.getJSON("example.json", function(data) {
  alert(JSON.stringify(data));
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus); })
.always(function() { alert('getJSON request ended!'); });

আপনি যদি সতর্কতা পছন্দ না করেন তবে তাদের সাথে বিকল্প দিন console.log

$.getJSON("example.json", function(data) {
  console.log(JSON.stringify(data));
})
.done(function() { console.log('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { console.log('getJSON request failed! ' + textStatus); })
.always(function() { console.log('getJSON request ended!'); });

getJSON এর অভ্যন্তরীণ কোডটি করা, ব্যর্থ, সর্বদা এবং কালানুক্রমিক ক্রম কি?
TheLogicGuy

দ্রষ্টব্য: কনসোল.লগ আইআই 7 হিসাবে পুরানো ব্রাউজারগুলিতে প্রয়োগ করা হয় না! আপনি যদি এটি ব্যবহার করেন!
ম্যাডম্যাড 666

12

আমি জানি যে এখানে কিছুক্ষণ উত্তর দেওয়া হয়েছে এবং পোস্টার সম্ভবত ইতিমধ্যে বা অন্য কোথাও থেকে তার উত্তর পেয়েছে। তবে আমি মনে করি যে এই পোস্টটি যে কাউকে জেএসএসন অনুরোধ করার সময় ত্রুটি এবং সময়সীমার ট্র্যাক রাখার উপায় অনুসন্ধান করতে সহায়তা করবে। সুতরাং আমার প্রশ্নের উত্তর নীচে

GetJSON কাঠামোটি নীচে রয়েছে ( http://api.jqueri.com এ পাওয়া যায় ):

$(selector).getJSON(url,data,success(data,status,xhr))

বেশিরভাগ লোক এটি ব্যবহার করে প্রয়োগ করে

$.getJSON(url, datatosend, function(data){
    //do something with the data
});

যেখানে তারা ইউএসএল ভার ব্যবহার করে জেএসএন ডেটাতে একটি লিঙ্ক সরবরাহ করে, "?callback=?"সঠিক জেএসওএন ডেটা ফেরত পেতে পাঠাতে হবে এমন অন্যান্য ভেরিয়েবল যুক্ত করার জন্য স্থান হিসাবে ডেটাটোস্যান্ড এবং ডেটা প্রসেসিংয়ের জন্য একটি কার্য হিসাবে সাফল্য ফ্যানসিওন ।

তবে আপনি আপনার সাফল্য ফাংশনে স্থিতি এবং এক্সএইচআর ভেরিয়েবলগুলি যুক্ত করতে পারেন। অবস্থা পরিবর্তনশীল নিম্নলিখিত পংক্তি এক রয়েছে: "সফল", "notmodified", "ত্রুটি", "সময়সীমার", বা "parsererror", এবং XHR পরিবর্তনশীল ফিরে XMLHttpRequest- এর বস্তু (ধারণ W3Schools পাওয়া )

$.getJSON(url, datatosend, function(data, status, xhr){
    if (status == "success"){
        //do something with the data
    }else if (status == "timeout"){
        alert("Something is wrong with the connection");
    }else if (status == "error" || status == "parsererror" ){
        alert("An error occured");
    }else{
        alert("datatosend did not change");
    }         
});

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

আশা করি এটি এখনও কাউকে এই প্রশ্নের উত্তর সন্ধান করতে সহায়তা করে।


2
এটি কাজ করে না। "সাফল্য" কলব্যাক, যেমন এর নাম থেকে বোঝা যায়, কেবলমাত্র সাফল্যের জন্য ডাকা হয়। (সুতরাং "স্ট্যাটাস" প্যারামিটার কী তা আমি নিশ্চিত নই ...)
জুয়েলশ

4

$.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })

এটি jQuery 2.x এ স্থির করা হয়েছে; JQuery 1.x এ আপনি কখনও ত্রুটি কলব্যাক পাবেন না


1

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

যদি সম্ভব হয় তবে এটি সবচেয়ে সহজ সমাধান বলে মনে হচ্ছে। আমি ব্যবহার করি পাইথন কোডের একটি নমুনা এখানে। (ফ্লাস্ক, ফ্লাস্কের জসোনাইফ এফ এবং এসকিউএএলএলকেমি ব্যবহার করে)

try:
    snip = Snip.query.filter_by(user_id=current_user.get_id(), id=snip_id).first()
    db.session.delete(snip)
    db.session.commit()
    return jsonify(success=True)
except Exception, e:
    logging.debug(e)
    return jsonify(error="Sorry, we couldn't delete that clip.")

তারপরে আপনি জাভাস্ক্রিপ্ট এ জাতীয় পরীক্ষা করতে পারেন;

$.getJSON('/ajax/deleteSnip/' + data_id,
    function(data){
    console.log(data);
    if (data.success === true) {
       console.log("successfully deleted snip");
       $('.snippet[data-id="' + data_id + '"]').slideUp();
    }
    else {
       //only shows if the data object was returned
    }
});

সার্ভারের মধ্যে ঘটে যাওয়া ত্রুটিগুলির জন্য এটি ঠিক আছে, তবে কলটি সার্ভারে পৌঁছাতে না পারলে বা সার্ভার কোডটি হিট করার আগে কোনও ত্রুটি ছুঁড়ে ফেলা হলে এটি ক্যাপচার করে না যেমন এমভিসি ব্যবহারকারী আর প্রমাণীকরণ না করে।
লি ওডেস

1

কেন না

getJSON('get.php',{cmd:"1", typeID:$('#typesSelect')},function(data) {
    // ...
});

function getJSON(url,params,callback) {
    return $.getJSON(url,params,callback)
        .fail(function(jqXMLHttpRequest,textStatus,errorThrown) {
            console.dir(jqXMLHttpRequest);
            alert('Ajax data request failed: "'+textStatus+':'+errorThrown+'" - see javascript console for details.');
        })
}

??

ব্যবহৃত .fail()পদ্ধতি সম্পর্কে বিস্তারিত জানতে (jQuery 1.5++), দেখুন http://api.jquery.com/jQuery.ajax/#jqXHR

যেহেতু jqXHRফাংশনটি দিয়ে ফিরে এসেছে, একটি শৃঙ্খলার মতো

$.when(getJSON(...)).then(function() { ... });

সম্ভব.


0

কিছু ক্ষেত্রে, আপনি এই পদ্ধতির সাথে সিঙ্ক্রোনাইজেশনের কোনও সমস্যায় পড়তে পারেন। আমি একটি setTimeoutফাংশনের অভ্যন্তরে কলব্যাক কলটি লিখেছি এবং এটি সিঙ্ক্রোনসিভভাবে ঠিক কাজ করেছে =)

উদাহরণ:

function obterJson(callback) {


    jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {

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