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.

¿Fue útil?

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

¿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);
                   }
        });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top