Синтаксис: ошибка JSON.parse, при попытке загрузить данные для протовиса - PullRequest
2 голосов
/ 15 января 2011

Привет, я учусь работать с Protovis, пока все хорошо, но теперь я наткнулся на проблему, которую, похоже, не могу решить.

Ниже приведен код. ( В мои заголовки загружен последний jquery )

<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();

Когда я пытаюсь сделать это в Firefox, я получаю следующее предупреждение:

Syntax:Error JSON.parse

Я уже подтвердил JSON на http://www.jsonlint.com/. Так что проблема должна быть в другом месте.

Кто-нибудь знает, что здесь происходит?

Редактировать

Я попытался загрузить те же данные в приложение protoviewer: http://www.rioleo.org/protoviewer/, и это работает. Так что это должен быть код.

Ответы [ 4 ]

2 голосов
/ 15 января 2011

Вы пробовали обычный асинхронный обратный вызов вместо синхронного подхода? Как:

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();     
  }
});

Кроме того, находится ли этот файл JSON на том же сервере, что страница, выполняющая запрос, отображается в адресной строке (в точности http://eagereyes.org)?

Наконец, шаг JSON.parse () вручную не требуется. Если вы добавите параметр dataType: 'json', $ .ajax () автоматически десериализуется как JSON и будет использовать JSON.parse (), где это возможно.

0 голосов
/ 15 октября 2012
$.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);
                   }
        });
0 голосов
/ 15 января 2011

Добавьте точку с запятой ; в конец вашего ответа

0 голосов
/ 15 января 2011

Какой браузер вы используете? Некоторые браузеры не определяют объект JSON. Вы можете скачать скрипт по указанному ниже URL-адресу, который определит объект JSON, если он еще не существует.

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

Вы можете проверить, определяется ли JSON следующим образом:

alert(JSON);

обновление

ОК. Следующее, что я хотел бы сделать, это проверить, что вызов ajax действительно возвращает данные ядра. Измените свой код, чтобы напечатать JSON, возвращенный из вызова ajax.

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