Sintaxis: Error JSON.parse, al intentar cargar los datos para Protovis
-
11-10-2019 - |
Pregunta
Hola estoy aprendiendo cómo trabajar con Protovis, hasta ahora tan bueno, pero ahora me tropezado con un problema que parece que no puede resolver.
El siguiente es el código. ( Tengo la última jQuery cargado en mis cabeceras )
<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();
Cuando intento esto en Firefox me sale esta alerta:
Syntax:Error JSON.parse
Me han validado el JSON en http://www.jsonlint.com/ ya. Así que el problema debe estar en otra parte.
Cualquier persona sabe qué se está encendiendo aquí?
Editar
Me trató de cargar los mismos datos en la aplicación protoviewer: http://www.rioleo.org/protoviewer/ y funciona. Por lo que debe ser el código.
Solución
¿Usted ha intentado una devolución de llamada asincrónica regular en lugar del enfoque sincrónico? Como:
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();
}
});
Además, es ese archivo JSON se encuentra en el mismo servidor que la página que realiza la solicitud muestra en la barra de direcciones (exactamente http://eagereyes.org
)?
Finalmente, el JSON.parse () paso manual no es necesario. Si se agrega el parámetro dataType: 'json'
, .ajax $ () se deserializar automáticamente como JSON y usos JSON.parse () cuando estén disponibles.
Otros consejos
Añadir un ;
punto y coma al final de su respuesta ??p>
¿Qué navegador está usando? Algunos navegadores no definen el objeto JSON
. Puede descargar un script desde la URL siguiente que va a definir el objeto JSON
si no existe ya.
https://github.com/douglascrockford/JSON-js
Se puede comprobar si se define JSON
la siguiente manera:
alert(JSON);
actualización
Aceptar siguiente cosa que me gustaría hacer es comprobar que la llamada AJAX es en realidad la devolución de los datos corect. Cambiar el código para imprimir el JSON de regresar de la llamada 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);
}
});