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.

War es hilfreich?

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);
                   }
        });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top