Hvorfor $ .getJSON stille mislykkes?

stemmer
43

Det virker veldig upraktisk at jQuery er $.getJSONstille mislykkes når dataene som returneres er ikke gyldig JSON. Hvorfor ble dette gjennomført med stille fiasko? Hva er den enkleste måten å utføre getJSON med bedre svikt atferd (f.eks kaste et unntak, console.log()eller hva)?

Publisert på 30/03/2011 klokken 19:44
kilden bruker
På andre språk...                            


5 svar

stemmer
0

Du bør ta en titt på docs for API ... det har en .error på den.

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

Svarte 30/03/2011 kl. 19:48
kilden bruker

stemmer
3

Du kan bruke $.ajaxi stedet, og angi dataTypealternativer for å "json". Fra dokumentasjon:

"json": Evaluerer responsen som JSON og returnerer en Javascript-objekt. I jQuery 1.4 JSON- data blir tolket på en streng måte; noen misformet JSON blir avvist og en analysefeil er kastet . (Se json.org for mer informasjon om riktig JSON formatering.)

Svarte 30/03/2011 kl. 19:48
kilden bruker

stemmer
29

Rett fra dokumentasjon:

Viktig: Fra og jQuery 1.4, hvis JSON-filen inneholder en syntaksfeil, etter anmodning vil vanligvis mislykkes stille.

Som dokumentasjon sier, er getJSON bare en forkortelse metode for

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

For å få feil atferd, kan du bruke $ .ajax som dette:

$.ajax({
    url: url,
    dataType: 'json',
    data: data,
    success: callback,
    error: another callback
});
Svarte 30/03/2011 kl. 19:48
kilden bruker

stemmer
83

du kan bruke

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

Hvis du ønsker å se årsaken til feilen, må du bruke fullversjonen

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

Hvis JSON er ikke velformet, vil du se noe sånt

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

Hvis nettadressen er feil, vil du se noe sånt

getJSON failed, status: error, error: Not Found

Hvis du prøver å få JSON fra et annet domene, brudd på samme opprinnelse politikk , returnerer denne tilnærmingen en tom melding. Merk at du kan omgå det samme opprinnelse-policyen ved hjelp JSONP (som har sine begrensninger ) eller den foretrukne metoden for Cross-opprinnelse Resource Sharing ( kor ).

Svarte 27/04/2012 kl. 12:01
kilden bruker

stemmer
0

Hvis du ber om JSONP som svaret, vil du få en stille mislykkes hvis det ikke er noen respons (f.eks nettverksbrudd). Se denne tråden for mer informasjon.

Svarte 13/01/2016 kl. 15:41
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more