আপনি কীভাবে জেএসএসন কলটিতে ত্রুটিগুলি পরিচালনা করতে পারেন? আমি jsonp ব্যবহার করে ক্রস-ডোমেন স্ক্রিপ্ট পরিষেবাটি উল্লেখ করার চেষ্টা করছি, আপনি কীভাবে একটি ত্রুটি পদ্ধতি নিবন্ধন করবেন?
আপনি কীভাবে জেএসএসন কলটিতে ত্রুটিগুলি পরিচালনা করতে পারেন? আমি jsonp ব্যবহার করে ক্রস-ডোমেন স্ক্রিপ্ট পরিষেবাটি উল্লেখ করার চেষ্টা করছি, আপনি কীভাবে একটি ত্রুটি পদ্ধতি নিবন্ধন করবেন?
উত্তর:
$.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"); });
JSONP
মনে getJSON
হয় যে এই ক্ষেত্রে error()
ফাংশনটি কল করে না । আমারও একই সমস্যা হচ্ছে আমি অনুমান করি যে এটি উভয়ই পরিচালনা করা সত্ত্বেও JSONP
সাধারণ AJAX
কলগুলির তুলনায় সম্পূর্ণ আলাদাভাবে কীভাবে পরিচালনা করা হয় with একটি অবজেক্টের সাথে সম্পন্ন করা হয় তবে পৃষ্ঠার একটি ট্যাগ যুক্ত করে ডায়নামিকভাবে সম্পন্ন করা হয় । jQuery
getJSON
JSON
XMLHTTPRequest
JSONP
<script>
HEAD
কেউ লুসিয়ানোকে এই বিষয়গুলি দিয়েছেন :) আমি কেবল তার উত্তরটি পরীক্ষা করেছি - এটি একটি অনুরূপ প্রশ্ন- এবং পুরোপুরি কাজ করেছি ...
এমনকি আমি আমার 50 সেন্ট যোগ করি:
.error(function(jqXHR, textStatus, errorThrown) {
console.log("error " + textStatus);
console.log("incoming Text " + jqXHR.responseText);
})
এখানে আমার সংযোজন।
থেকে 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 কাঠামোটি নীচে রয়েছে ( 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");
}
});
এইভাবে একবার অনুরোধ শেষ হয়ে গেলে কোনও কাস্টম টাইমআউট ট্র্যাকার প্রয়োগ না করেই টাইমআউট এবং ত্রুটির উপর নজর রাখা সহজ।
আশা করি এটি এখনও কাউকে এই প্রশ্নের উত্তর সন্ধান করতে সহায়তা করে।
$.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
এটি jQuery 2.x এ স্থির করা হয়েছে; JQuery 1.x এ আপনি কখনও ত্রুটি কলব্যাক পাবেন না
আমি এই একই সমস্যার মুখোমুখি হয়েছিলাম, তবে ব্যর্থ অনুরোধের জন্য কলব্যাক তৈরি করার পরিবর্তে আমি কেবল জেএসন ডেটা অবজেক্টের সাথে একটি ত্রুটি ফিরিয়ে দিয়েছি।
যদি সম্ভব হয় তবে এটি সবচেয়ে সহজ সমাধান বলে মনে হচ্ছে। আমি ব্যবহার করি পাইথন কোডের একটি নমুনা এখানে। (ফ্লাস্ক, ফ্লাস্কের জসোনাইফ এফ এবং এসকিউএএলএলকেমি ব্যবহার করে)
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
}
});
কেন না
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() { ... });
সম্ভব.
কিছু ক্ষেত্রে, আপনি এই পদ্ধতির সাথে সিঙ্ক্রোনাইজেশনের কোনও সমস্যায় পড়তে পারেন। আমি একটি setTimeout
ফাংশনের অভ্যন্তরে কলব্যাক কলটি লিখেছি এবং এটি সিঙ্ক্রোনসিভভাবে ঠিক কাজ করেছে =)
উদাহরণ:
function obterJson(callback) {
jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {
setTimeout(function(){
callback(data);
},0);
}