2017-05-18 4 views
0

Versuchen, einige JSON-Code vom Server zurückgeben, so dass ich es innerhalb des JavaScript bearbeiten kann.Vanilla ES6 aJax Anruf Unerwartete Token

aber ich bin den folgenden Fehler erhalten:

Uncaught SyntaxError: Unexpected token m in JSON at position 10

Hier ist mein Code:

getJSON(url, success) { 
     let query = [ 'cars', 'vans', 'bikes' ]; 

     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function() { 
     if (xhr.readyState === 4) { 
      if (xhr.status === 200) { 
      success(JSON.parse(xhr.responseText)); 
      } else { 
      exit(xhr.responseText); 
      } 
     } 
     }; 
     xhr.open('GET', url); 
     xhr.send(); 
    } 

Dies ist die Antwort, die ich bekommen, wenn ich das nur console.log xhr.responseText:

[ 
    { 
    make: 'VOLVO' 
    }, 
    { 
    make: 'AUDI' 
    }, 
    { 
    make: 'VOLKSWAGON' 
    }, 
] 
+6

Dies gilt nicht JSON. JSON kann keine abschließenden Kommas haben und erfordert immer doppelte Anführungszeichen für Eigenschaftsnamen und Zeichenfolgen. – nils

+0

Mist, mein Fehler. Ich vermasselte die JSON –

+2

Sie möchten möglicherweise den Fehler abfangen, um ordnungsgemäß fehlschlagen, wenn der Server ungültige Daten zurückgibt. –

Antwort

1

Das Objekt, das Sie analysieren möchten, ist ein gültiges JavaScript-Objekt, aber kein gültiger JSON.

key s sollte Strings sein, die als

a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes

definiert sind, sollen Sie kein Komma verwenden (Can you use a trailing comma in a JSON object? sehen).

Ein richtiger JSON-String für Ihr Objekt sein sollte:

let s = '[ {"make": "VOLVO"}, {"make": "AUDI"}, {"make": "VOLKSWAGON"} ]'; 

-Code dieses Problem behoben werden kann erkennen:

getJSON(url, success) { 
    let query = [ 'cars', 'vans', 'bikes' ]; 
    let xhr = new XMLHttpRequest(); 

    xhr.onreadystatechange = function() { 
     if (xhr.readyState === 4) { 
      if (xhr.status === 200) { 
       try { 
        let parsedJSON = JSON.parse(xhr.responseText); 
        success(parsedJSON); 
       } catch (e) { 
        if (e instanceof SyntaxError === true) { 
         // Problem with the format of the JSON string. 
        } else { 
         // Other error 
        } 
       } 
      } else { 
       exit(xhr.responseText); 
      } 
     } 
    }; 

    xhr.open('GET', url); 
    xhr.send(); 
} 

Misc. Ressourcen: