Bir getJSON çağrısında hataları nasıl halledebilirsiniz? Im jsonp kullanarak bir etki alanları arası komut dosyası hizmeti başvurmak çalışıyorum, nasıl bir hata yöntemi kayıt?
Bir getJSON çağrısında hataları nasıl halledebilirsiniz? Im jsonp kullanarak bir etki alanları arası komut dosyası hizmeti başvurmak çalışıyorum, nasıl bir hata yöntemi kayıt?
Yanıtlar:
$.getJSON()
JSON kodlu bir yanıt istediğinizi söylemek zorunda kalacağınız normal bir AJAX çağrısının bir tür soyutlamasıdır.
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Hataları iki şekilde ele alabilirsiniz: genel olarak (AJAX çağrılarınızı gerçekte aramadan önce yapılandırarak) veya özel olarak (yöntem zinciri ile).
'jenerik' şuna benzer:
$.ajaxSetup({
"error":function() { alert("error"); }
});
Ve 'özel' yol:
$.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
JSONP
gibi görünüyor getJSON
bu durumda error()
fonksiyonu çağırmaz . Bendede aynı sorun var. Her ikisini de ele almasına rağmen JSONP
normal AJAX
aramalardan nasıl tamamen farklı olduğu ile ilgilidir . bir nesneyle yapılır, ancak sayfanın dinamik olarak bir etiket eklenmesi ile yapılır . jQuery
getJSON
JSON
XMLHTTPRequest
JSONP
<script>
HEAD
Birisi Luciano'ya bu puanları verdi :) Benzer bir sorusu olan cevabını test ettim ve mükemmel çalıştı ...
50 sentimi bile ekliyorum:
.error(function(jqXHR, textStatus, errorThrown) {
console.log("error " + textStatus);
console.log("incoming Text " + jqXHR.responseText);
})
İşte ekim.
Gönderen http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html ve resmi kaynak
" JQuery 1.5 tanıtılan jqXHR.success (), jqXHR.error () ve jqXHR.complete () geri çağırma yöntemleri jQuery 1.8 olarak önerilmemektedir. Onların nihai kaldırılması için kodunuzu hazırlamak için, kullanım jqXHR.done (), jqXHR .fail () ve jqXHR.always () yerine ".
Bunu yaptım ve işte Luciano'nun güncellenmiş kod snippet'i:
$.getJSON("example.json", function() {
alert("success");
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function() { alert('getJSON request failed! '); })
.always(function() { alert('getJSON request ended!'); });
Hata açıklaması artı tüm json verilerini dize olarak gösteren:
$.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!'); });
Uyarıları beğenmediyseniz, bunların yerine 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!'); });
Birinin burada cevap vermesinden bu yana bir süre geçtiğini biliyorum ve poster muhtemelen cevabını buradan veya başka bir yerden almıştı. Ancak bu yazı getJSON istekleri yaparken hataları ve zaman aşımlarını takip etmek için bir yol arayan herkese yardımcı olacağını düşünüyorum. Bu nedenle aşağıdaki soruya verdiğim cevap
GetJSON yapısı aşağıdaki gibidir ( http://api.jqueri.com adresinde bulunur ):
$(selector).getJSON(url,data,success(data,status,xhr))
çoğu insan bunu kullanarak
$.getJSON(url, datatosend, function(data){
//do something with the data
});
url var'ı JSON verilerine bir bağlantı sağlamak için kullandıkları yerde "?callback=?"
, doğru JSON verisini almak için gönderilmesi gereken diğer değişkenleri ve gönderilmesi gereken diğer değişkenleri ve verilerin işlenmesi için bir işlev olarak başarı işlevini kullanır. .
Ancak, status ve xhr değişkenlerini başarı fonksiyonunuza ekleyebilirsiniz. Durum değişkeni şu dizelerden birini içerir: "başarılı", "değiştirilmemiş", "hata", "zaman aşımı" veya "ayrıştırıcı" ve xhr değişkeni döndürülen XMLHttpRequest nesnesini (w3schools'ta bulunur ) içerir
$.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");
}
});
Bu şekilde, bir istek yapıldığında başlatılan özel bir zaman aşımı izleyicisi uygulamak zorunda kalmadan zaman aşımlarını ve hataları takip etmek kolaydır.
Umarım bu hala bu soruya cevap arayan birine yardımcı olur.
$.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
JQuery 2.x ile sabitlenmiştir; JQuery 1.x sürümünde hiçbir zaman hata geri çağrısı almazsınız
Aynı sorunla karşı karşıya kaldım, ancak başarısız bir istek için geri arama oluşturmak yerine, sadece json veri nesnesiyle ilgili bir hata döndürdüm.
Mümkünse, bu en kolay çözüm gibi görünüyor. İşte kullandığım Python kodunun bir örneği. (Flask, Flask'ın jsonify f ve SQLAlchemy kullanarak)
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.")
Sonra böyle Javascript kontrol edebilirsiniz;
$.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
}
});
Neden olmasın
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.');
})
}
??
Kullanılan .fail()
yöntemle ilgili ayrıntılar için (jQuery 1.5+), bkz. Http://api.jquery.com/jQuery.ajax/#jqXHR
Yana jqXHR
fonksiyonu, bir zincirleme gibi tarafından döndürülen
$.when(getJSON(...)).then(function() { ... });
mümkün.
Bazı durumlarda, bu yöntemle senkronizasyon sorunu yaşayabilirsiniz. Geri arama çağrısını birsetTimeout
fonksiyonun senkronize olarak gayet iyi çalıştı =)
ÖRNEĞİN:
function obterJson(callback) {
jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {
setTimeout(function(){
callback(data);
},0);
}
Bu oldukça eski bir iş parçacığı, ama Google arama geliyor, bu yüzden vaat kullanarak bir jQuery 3 cevap eklemek düşündüm. Bu pasaj ayrıca şunları gösterir:
Kod pasajı:
$.getJSON({
url: "https://myurl.com/api",
headers: { "Authorization": "Bearer " + user.access_token}
}).then().always( function (data, textStatus) {
$("#txtAPIStatus").html(data.status);
$("#txtAPIValue").html(data.responseText);
});