43 votes

Pourquoi ne $.getJSON silencieusement à l'échec?

Il semble très gênant que de jQuery $.getJSON silencieusement échoue lorsque les données retournées ne sont pas JSON valide. Pourquoi en était-il mis en œuvre avec le silence de l'échec? Quel est le moyen le plus facile pour effectuer des getJSON avec un meilleur comportement d'échec (par exemple, lancer une exception, console.log(), ou quoi que ce soit)?

85voto

Mr Shoubs Points 2320

vous pouvez utiliser

        function name() {
            $.getJSON("", function(d) {
                alert("success");
            }).done(function(d) {
                alert("success");
            }).fail(function(d) {
                alert("error");
            }).always(function(d) {
                alert("complete");
            });
        }

Si vous voulez voir la cause de l'erreur, utilisez la version complète

function name() {
    $.getJSON("", function(d) {
        alert("success");
    }).fail( function(d, textStatus, error) {
        console.error("getJSON failed, status: " + textStatus + ", error: "+error)
    });
}

Si votre JSON n'est pas bien formé, vous verrez quelque chose comme

getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'

Si l'URL est fausse, vous verrez quelque chose comme

getJSON failed, status: error, error: Not Found

Si vous essayez d'obtenir JSON à partir d'un autre domaine, en violation de la politique de " Même origine, cette approche renvoie un message vide. Notez que vous pouvez travailler autour de la Même origine en utilisant le JSONP (qui a ses limites) ou la méthode préférée de Cross-origin Resource sharing (SCRO).

29voto

Håvard Points 5534

Directement à partir de la documentation:

Important: Comme de jQuery 1.4, si le fichier JSON contient une erreur de syntaxe, la demande est généralement silencieuse.

Comme la page de documentation dit, getJSON est tout simplement une méthode abrégée pour

$.ajax({
    url: url,
    dataType: 'json',
    data: data,
    success: callback
});

Pour obtenir de comportement d'échec, vous pouvez utiliser $.ajax comme ceci:

$.ajax({
    url: url,
    dataType: 'json',
    data: data,
    success: callback,
    error: another callback
});

3voto

karim79 Points 178055

Vous pouvez utiliser $.ajax au lieu de cela, et de définir l' dataType les options "json". À partir de la documentation:

"json": Évalue la réponse JSON et retourne un objet JavaScript. Dans jQuery 1.4 les données JSON est analysé dans manière stricte; tout JSON est mal formé rejeté et une erreur d'analyse s'est levée. (Voir json.org pour plus d'informations sur bon JSON mise en forme.)

0voto

CrazyDart Points 2793

Vous devriez jeter un oeil à la doc de cette API... il a une .erreur sur elle.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X