2011-01-14 9 views
2

Hi Ich lerne, wie man mit ProtoVis arbeitet, so weit so gut, aber jetzt stolperte ich über ein Problem, das ich nicht lösen kann.Syntax: Fehler JSON.parse, Beim Versuch, Daten für ProtoVis zu laden

Folgendes ist der Code. (Ich habe die neueste jQuery in meine 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 die JSON validiert wurden bereits auf http://www.jsonlint.com/ . Also muss das Problem anderswo sein.

Wer weiß, was hier los ist?

bearbeiten

Ich habe versucht, die gleichen Daten in der protoviewer App geladen: http://www.rioleo.org/protoviewer/ und es funktioniert. Also muss es der Code sein.

Antwort

2

Haben Sie einen regelmäßigen async Rückruf versuchen, 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 die JSON-Datei auf demselben Server befindet, dass die Seite die Anfrage in der Adressleiste zeigt machen (genau http://eagereyes.org)?

Schließlich ist der manuelle Schritt JSON.parse() nicht erforderlich. Wenn Sie den Parameter dataType: 'json' hinzufügen, wird $ .ajax() automatisch als JSON deserialisiert und verwendet JSON.parse(), sofern verfügbar.

+0

Danke !! Das hat mir den Fehler nicht mehr gegeben. Obwohl nichts geladen scheint. Ich weiß nicht, ob JSON sich auf demselben Server befindet. – bottleboot

+0

Wenn ich denselben Server sagte, hätte ich dieselbe Domain sagen sollen. Ist die Seite mit diesem JavaScript über eine URL erreichbar, die mit "http: // eagereyes.org" beginnt? –

+0

Hallo! Es ist eine andere Domäne. – bottleboot

0

Welchen Browser benutzen Sie? Einige Browser definieren das Objekt JSON nicht. Sie können ein Skript von der folgenden URL herunterladen, das das Objekt JSON definiert, falls es noch nicht existiert.

https://github.com/douglascrockford/JSON-js

Sie können, ob prüfen JSON ist wie folgt definiert:

alert(JSON); 

Update

OK nächste, was ich tun würde, ist zu überprüfen, dass die Ajax-Aufruf tatsächlich die Rückkehr ist Kerndaten. Ändern Sie Ihren Code, um den vom Ajax-Aufruf zurückgegebenen JSON zu drucken.

var JSONdata = $.ajax({ type: "GET", url: dataURL, async: false }).responseText; 
alert(JSONdata); 
var earthquakes = JSON.parse(JSONdata); 
+0

Vielen Dank! Ich benutze Firefox (Latest) und habe auch in Safari eingecheckt. Der Alarm (JSON) gab mir folgendes: [Objekt JSON] – bottleboot

+0

Okay, nochmals vielen Dank. Der erste mit der Warnung (JSONdata) gab mir einen leeren Alarm, dann den Fehler. Der zweite nur der Fehler. – bottleboot

0

Fügen Sie ein Semikolon ; bis zum Ende Ihrer Antwort

+0

Wo? Tut mir leid, ich sehe es nicht. Ich bin seit einiger Zeit an diesem Code beteiligt. – bottleboot

0
$.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); 
        } 
     }); 
Verwandte Themen