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)?

Author: Dan Burton, 2011-03-31

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).

 83
Author: Mr Shoubs,
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
});
 29
Author: Håvard,
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.)

 3
Author: karim79,
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.

Http://api.jquery.com/jQuery.getJSON/

 0
Author: CrazyDart,
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.

 0
Author: b.squared,
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