Dlaczego$.getJSON po cichu zawiedzie?
Wydaje się bardzo niewygodne, że jQuery jest $.getJSON
cicha awaria, gdy zwracane dane nie są poprawne JSON. Dlaczego zostało to wdrożone z cichą awarią? Jaki jest najprostszy sposób na wykonanie getJSON z lepszym zachowaniem błędów (np. wyrzucenie wyjątku, console.log()
, czy cokolwiek innego)?
5 answers
Możesz użyć
function name() {
$.getJSON("", function(d) {
alert("success");
}).done(function(d) {
alert("done");
}).fail(function(d) {
alert("error");
}).always(function(d) {
alert("complete");
});
}
Jeśli chcesz zobaczyć przyczynę błędu, użyj pełnej wersji
function name() {
$.getJSON("", function(d) {
alert("success");
}).fail( function(d, textStatus, error) {
console.error("getJSON failed, status: " + textStatus + ", error: "+error)
});
}
Jeśli twój JSON nie jest dobrze uformowany, zobaczysz coś w stylu
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
Jeśli adres URL jest nieprawidłowy, zobaczysz coś w stylu
getJSON failed, status: error, error: Not Found
Jeśli próbujesz uzyskać JSON z innej domeny, naruszając Politykę samego pochodzenia , to podejście zwraca pustą wiadomość. Zauważ, że możesz obejść zasady tego samego pochodzenia za pomocą JSONP (który ma ograniczenia ) lub preferowana metoda dzielenia zasobów (CORS).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 15:25:13
Prosto z dokumentacji:
Ważne: od wersji jQuery 1.4, jeśli plik JSON zawiera błąd składni, żądanie zwykle nie powiedzie się po cichu.
Jak mówi strona dokumentacji, getJSON jest po prostu metodą skróconą dla
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Aby uzyskać zachowanie błędu, możesz użyć $.ajax TAK:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
error: another callback
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 21:48:37
Możesz użyć $.ajax
zamiast tego ustaw opcje dataType
na "json". Z dokumentacji:
"json": ocenia odpowiedź jako JSON i zwraca obiekt JavaScript. W jQuery 1.4 dane JSON są przetwarzane w sposób ścisły; każdy zniekształcony JSON jest odrzucono i wyrzucono błąd parse . (Patrz json.org więcej informacji na temat poprawne formatowanie JSON.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 21:48:22
Powinieneś spojrzeć na dokumenty dla tego API... ma .błąd.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 21:48:17
Jeśli żądasz JSONP jako odpowiedzi, otrzymasz cichą awarię, jeśli nie ma odpowiedzi(np. przerwa w sieci). Zobacz Ten wątek Po szczegóły.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:04