Syntaxe: Erreur JSON.parse, Lorsque vous essayez de charger des données pour protovis
-
11-10-2019 - |
Question
Salut j'apprends comment travailler avec protovis, si tout va bien, mais maintenant je suis tombé sur un problème que je ne peux pas sembler résoudre.
Ce qui suit est le code. ( J'ai la dernière jquery chargé dans mes en-têtes )
<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();
Lorsque je tente ce dans Firefox que je reçois cette alerte:
Syntax:Error JSON.parse
J'ai validé le JSON sur http://www.jsonlint.com/ déjà. Donc, le problème doit être ailleurs.
Tout le monde sait ce qui se passe ici?
Modifier
J'ai essayé de charger les mêmes données dans l'application protoviewer: http://www.rioleo.org/protoviewer/ et cela fonctionne. Il doit donc être le code.
La solution
Avez-vous essayé un rappel régulier async au lieu de l'approche synchrone? Comme:
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();
}
});
Aussi, est-ce fichier JSON situé sur le même serveur que la page faisant des spectacles de demande dans la barre d'adresse (exactement de http://eagereyes.org
)?
Enfin, l'étape manuelle JSON.parse () n'est pas nécessaire. Si vous ajoutez le paramètre dataType: 'json'
, .ajax $ () sera automatiquement désérialiser JSON et utilise JSON.parse () le cas échéant.
Autres conseils
Ajouter un ;
point-virgule à la fin de votre réponse
Quel navigateur utilisez-vous? Certains navigateurs ne définissent pas l'objet JSON
. Vous pouvez télécharger un script de l'URL ci-dessous qui définira l'objet JSON
si elle n'existe pas déjà.
https://github.com/douglascrockford/JSON-js
Vous pouvez vérifier si JSON
est défini comme suit:
alert(JSON);
mise à jour
OK La prochaine chose que je ferais est de vérifier que l'appel ajax est en fait de renvoyer les données corect. Modifiez votre code pour imprimer le JSON retour de l'appel ajax.
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);
}
});