У меня есть простой код javascript/jquery, который запрашивает данные из какой-либо веб-службы, которая возвращает данные, которые могут использоваться для создания диаграммы высоких диаграмм. Ответ от сервера не может быть проанализирован в JSON, поскольку он содержит обработчик события щелчка, который не в состоянии быть разобран JSON.parse с ошибкой Unexpected keyword ....
Проанализируйте HTTP-ответ, который содержит сериализованный объект с функциями
Javascript код выглядит следующим образом
$.ajax({
type:"POST",
url:"service/call"
}).done(function(xdata) {
// this is not going to work as xdata is not object but plain text
$('#container').highcharts(xdata);
});
ответ с сервера подобен
{
"chart" : {
"type" : "bar"
},
"series" : [ {
"data" : [ 25, 10 ]
} ],
"title" : {
"text" : ""
},
"xAxis" : [ {
"categories" : [ "data1", "data2"],
"allowDecimals" : false
} ],
"yAxis" : [ {
"title" : {
"align" : "high",
"text" : "Some Title"
},
"allowDecimals" : false,
"labels" : {
"overflow" : "justify"
},
"min" : 0
} ],
"credits" : {
"enabled" : false
},
"plotOptions" : {
"bar" : {
"colors" : [ "#87bdee", "#ffcccc"],
"colorByPoint" : true,
"dataLabels" : {
"enabled" : true
},
"point" : {
"events" : {
"click" : function(){window.location.href = '/data?type=' + (this.x == 0 ? 'data1' : (this.x == 1 ? 'hold' : (this.x == 2 ? 'data2' : (this.x == 3 ? 'data3' : (this.x == 4 ? 'data4' : (this.x == 5 ? 'data5' : (this.x == 6 ? 'data6' : 'data7')))))))}
}
}
}
},
"tooltip" : {
"valueSuffix" : " elements"
},
"creditOptions" : {
"enabled" : false
}
}
У меня есть доступ к серверному и клиентскому кодам.
Итак, есть ли простой способ заставить все работать? Я имею в виду, как я могу создать highchart без изменения ответа?
Он пытается разобрать этот ответ как JSON, но это * не * JSON. Вы не * возвращаете JSON. [JSON - это особый формат] (http://json.org/), который поддерживает только строки, числа, объекты, массивы, логические значения и null. У вас не может быть 'function' внутри файла/строки JSON. –
Вы можете попробовать преобразовать функцию в строку, а затем проанализировать функцию как строку с помощью 'eval()' или 'Function' – guest271314
Вы не можете иметь функции в JSON, это чисто формат данных. У вас может быть строка и запустить EVAL на ней или просто иметь имя функции и параметры (т.е. сохранить уже определенную функцию на клиенте и просто указать параметры) –