Синтаксис: ошибка json.parse, при попытке загрузить данные для протовиса
-
11-10-2019 - |
Вопрос
Привет, я учусь работать с Протовисом, пока все хорошо, но теперь я наткнулся на проблему, которую я не могу решить.
Ниже приведен код. (У меня есть последний 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/ И это работает. Так что это должен быть код.
Решение
Вы пробовали регулярный асинхронный обратный вызов вместо синхронного подхода? Нравиться:
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 (), где доступно.
Другие советы
Добавить полуколон ;
до конца вашего ответа
Какой браузер вы используете? Некоторые браузеры не определяют JSON
объект. Вы можете скачать сценарий с URL -адреса, который будет определять JSON
объект, если его еще не существует.
https://github.com/douglascrockford/json-js
Вы можете проверить, JSON
определяется следующим образом:
alert(JSON);
Обновить
Хорошо, следующее, что я сделаю, это проверить, что вызов Ajax фактически возвращает данные CORECT. Измените свой код, чтобы распечатать JSON, возвращенный из вызова 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);
}
});