Syntax: Fehler JSON.parse, Beim Versuch, Daten für Protovis zu laden
-
11-10-2019 - |
Frage
Hallo ich lerne, wie man mit Protovis zu arbeiten, so weit so gut, aber jetzt stieß ich auf ein Problem, kann ich nicht zu lösen scheint.
Im Folgenden ist der Code. ( Ich habe die neueste jQuery in meinen Header geladen )
<script type="text/javascript+protovis">
var dataURL = "http://eagereyes.org/media/2010/protovis-primer/earthquakes.json";
var JSONdata = $.ajax({ type: "GET", url: dataURL, async: false }).responseText;
var earthquakes = JSON.parse(JSONdata);
var width = 560;
var height = 245;
var barWidth = width/earthquakes.length;
var gap = 2;
new pv.Panel().width(width).height(height+5)
.add(pv.Bar)
.data(earthquakes)
.bottom(0)
.width(barWidth-gap)
.height(function(d) d.Magnitude * (height/9))
.left(function() this.index * barWidth)
.root.render();
Wenn ich versuche, dies in Firefox bekomme ich diese Warnung:
Syntax:Error JSON.parse
Ich habe die JSON validiert http://www.jsonlint.com/ bereits. So muss das Problem an anderer Stelle sein.
Wer weiß, was los hier?
Bearbeiten
habe ich versucht, die gleichen Daten in der protoviewer App geladen: http://www.rioleo.org/protoviewer/ und es funktioniert. So muss der Code sein.
Lösung
Haben Sie versucht, einen regelmäßigen async Rückruf statt den synchronen Ansatz? Wie:
var dataURL = "http://eagereyes.org/media/2010/protovis-primer/earthquakes.json";
$.ajax({
type: "GET",
url: dataURL,
success: function(response) {
var earthquakes = JSON.parse(JSONdata);
var width = 560;
var height = 245;
var barWidth = width/earthquakes.length;
var gap = 2;
new pv.Panel().width(width).height(height+5)
.add(pv.Bar)
.data(earthquakes)
.bottom(0)
.width(barWidth-gap)
.height(function(d) d.Magnitude * (height/9))
.left(function() this.index * barWidth)
.root.render();
}
});
Auch ist, dass JSON-Datei auf demselben Server befindet, dass die Seite in der Adressleiste die Anfrage zeigt machen (genau http://eagereyes.org
)?
Schließlich ist der manuelle JSON.parse () Schritt ist nicht erforderlich. Wenn Sie den dataType: 'json'
Parameter hinzufügen, $ Schnipsel () werden als JSON automatisch deserialisieren und verwendet JSON.parse (), sofern verfügbar.
Andere Tipps
Fügen Sie ein Semikolon ;
bis zum Ende Ihrer Antwort
Welchen Browser verwenden Sie? Einige Browser definieren nicht die JSON
Objekt. Sie können einen Skript von der URL herunterladen, unter dem das JSON
Objekt definieren, wenn es nicht bereits vorhanden ist.
https://github.com/douglascrockford/JSON-js
Sie können prüfen, ob JSON
ist wie folgt definiert:
alert(JSON);
Update
OK nächstes, was ich tun würde, ist zu prüfen, ob der Ajax-Aufruf tatsächlich die corect Daten zurück. Ändern Sie Ihren Code, um die JSON zurückgegeben von der Ajax-Aufruf zu drucken.
var JSONdata = $.ajax({ type: "GET", url: dataURL, async: false }).responseText;
alert(JSONdata);
var earthquakes = JSON.parse(JSONdata);
$.ajax({
type: "POST",
url: "saveChangesInEditing.php",
data: idObject,
success: function(data){
dataObject = JSON.parse(data);
$("input[name = 'id']").val(dataObject.id);
$("input[name='full_name']").val(dataObject.full_name);
$("input[name='sport']").val(dataObject.sport);
$("input[name='idol']").val(dataObject.idol);
},
error: function(data){
alert("error!" + data);
}
});