गेटजोन कॉल में आप त्रुटियों को कैसे संभाल सकते हैं? Im jsonp का उपयोग करके एक क्रॉस-डोमेन स्क्रिप्ट सेवा का संदर्भ देने की कोशिश कर रहा है, आप एक त्रुटि विधि कैसे दर्ज करते हैं?
गेटजोन कॉल में आप त्रुटियों को कैसे संभाल सकते हैं? Im jsonp का उपयोग करके एक क्रॉस-डोमेन स्क्रिप्ट सेवा का संदर्भ देने की कोशिश कर रहा है, आप एक त्रुटि विधि कैसे दर्ज करते हैं?
जवाबों:
$.getJSON()
एक नियमित AJAX कॉल का एक प्रकार है जहां आपको यह बताना होगा कि आप JSON एन्कोडेड प्रतिक्रिया चाहते हैं।
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
आप त्रुटियों को दो तरीकों से संभाल सकते हैं: मूल रूप से (वास्तव में उन्हें कॉल करने से पहले अपने AJAX कॉल को कॉन्फ़िगर करके) या विशेष रूप से (विधि श्रृंखला के साथ)।
'जेनेरिक' कुछ इस तरह होगा:
$.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
कॉल के लिए पूरी तरह से अलग कैसे नियंत्रित किया जाता है । एक वस्तु के साथ किया जाता है, लेकिन पृष्ठ के टैग को गतिशील रूप से जोड़कर किया जाता है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 1.5 में प्रस्तुत किया गया है jQuery 1.8 के रूप में चित्रित किया गया है। अपने अंतिम निष्कासन के लिए अपना कोड तैयार करने के लिए, jqXHR.done (), jqXHR.done का उपयोग करें। .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
});
जहां वे JSON डेटा का लिंक प्रदान करने के लिए url var का उपयोग करते हैं, डेटाटोसेंड को जोड़ने के स्थान के रूप में "?callback=?"
और अन्य चर जिन्हें सही JSON डेटा प्राप्त करने के लिए भेजा जाना है, और डेटा को संसाधित करने के लिए एक फ़ंक्शन के रूप में सफलता का कवक। ।
आप हालांकि अपने सफलता समारोह में स्थिति और xhr चर जोड़ सकते हैं। स्टेटस वैरिएबल में निम्न स्ट्रिंग्स में से एक होता है: "सफलता", "नोट्मोडिफ़ाइड", "एरर", "टाइमआउट", या "पार्सररोर", और 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/#sqqHR देखें
चूंकि jqXHR
फ़ंक्शन द्वारा लौटाया जाता है, जैसे एक चिनिंग
$.when(getJSON(...)).then(function() { ... });
संभव है।
कुछ मामलों में, आप इस पद्धति के साथ सिंक्रनाइज़ेशन की समस्या में भाग सकते हैं। मैंने कॉलबैक कॉल ए के अंदर लिखाsetTimeout
फ़ंक्शन के , और यह तुल्यकालिक रूप से ठीक काम किया =)
ईजी:
function obterJson(callback) {
jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {
setTimeout(function(){
callback(data);
},0);
}