2016-12-21 3 views
1

Ich versuche, einige JSON-Daten auf meiner Website von einer externen URL aus anzuzeigen. Wenn das Skript ausführen bekomme ich diesen Fehler aus der Chromkonsole:Fehler beim Speichern von JSON-Daten in der Variablen

Uncaught SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse()

Javascript:

var json = $.getJSON("url"); 

var a = JSON.parse(json.responseText); 

var result = a.query.results.rate; 

document.write(result[0].Rate); 

Wenn ich tippe console.log(result) in der Konsole gibt es undefined

JSON:

{ 
"query": { 
    "count": 6, 
    "created": "2016-12-21T19:18:22Z", 
    "lang": "en-US", 
    "diagnostics": { 
     "url": [{ 
       "execution-start-time": "1", 
       "execution-stop-time": "2", 
       "execution-time": "1", 
       "content": "url" 
      }, { 
       "execution-start-time": "5", 
       // more of this 
      ] 

      "results": { 
       "rate": [{ 
         "id": "GBPUSD", 
         "Name": "GBP/USD", 
         "Rate": "1.2371", 
        }, 

        { 
         "id": "GBPEUR", 
         // more of this 
        }, 

       } 
      ] 
     } 

Ich kann keine Änderungen an der JSON-Datei vornehmen, aber ich habe es überprüft und es ist gültig.

P.S. Wenn ich den JavaScript-Code in der Chrome-Konsole schreibe, funktioniert es.

Vielen Dank im Voraus.

+2

Ich rate, die u ist der erste Buchstabe von "undefined" –

+0

Ich habe gerade die Probe JSON durch [jsbeau tifier.org] (http://jsbeautifier.org/) - es sieht so aus, als wäre das äußere json-Objekt nicht richtig geschlossen ... –

+0

Haben Sie versucht, am Ende Ihrer Anfrage eine "? callback =" - Zeichenkette zu setzen? URL? –

Antwort

4

Hier ist Ihr Problem:

var json = $.getJSON("url"); 

Dies ist ein asynchroner Vorgang, Sie müssen ihm Zeit geben, zu laden, so etwas wie dies funktionieren würde:

$.getJSON("url").done(function(response) { 
    var result = response.query.results.rate; 
    document.write(result[0].Rate); 
}); 
+1

Vielen Dank, es funktioniert! – hml

0

Es wird in der Konsole funktionieren, wenn Sie jede Zeile mit ein wenig Zeit dazwischen ausführen AS Antwort wurde Zeit haben, um ResponseText abzuschließen und zu füllen. Sie müssen den Hauptcode in einer Callback- oder einer Versprechenskette riten, nachdem $ .getJSON abgeschlossen wurde.

Vielleicht ...

$.getJSON("url").then(function(data){ 
    var result = data.query.results.rate; 
    document.write(result[0].Rate); 
}); 
+0

Vielen Dank, es funktioniert auch! – hml

Verwandte Themen