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.

Était-ce utile?

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);
                   }
        });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top