1

首先,很抱歉我的英语不好。我有个问题。我需要从 ajax 调用创建一个高图。

这很完美:

chartOptions = { chart: {  renderTo: 'grafica1', type: 'area', },  series: [{ data: [1,2,3] }]};
chartprueba = new Highcharts.Chart(chartOptions);

我想做的是一个带有消息或json响应的ajax,例如:

"chart: { renderTo: 'grafica1', type: 'area', }, series: [{ data: [1,2,3] }]}"

所以我需要一种jQuery解释类似代码而不是字符串的方式......

这是我的示例,但不起作用:

msg =  JSON.parse(msg);
chartOptions = msg;
chartprueba = new Highcharts.Chart(chartOptions);

因为chartOptions字符串不是对象...

4

3 回答 3

3

这个字符串

"chart: { renderTo: 'grafica1', type: 'area', }, series: [{ data: [1,2,3] }]}"

不是有效的 JSON。它没有左大括号,它有杂散的逗号,没有引用键。它甚至不是一个有效的 javascript 对象定义,但检查json.orgJSON 强加的额外严格性。

编辑:根据您在其他地方的评论:

您是 JSON 编码字符串,而不是对象。你想要的是类似的东西

$retorno = Array(
 chart => Array (renderTo =>'grafica1', type => 'area' ),
 series => Array(Array(data => Array(1,2,3)))
);
echo json_encode($retorno);

(如果我记得php语法正确的话)。

于 2013-10-21T19:33:28.900 回答
1

首先,您应该尝试更新服务器端资源以输出Object有效的 JSON。

{ "chart": { "renderTo": "grafica1", "type": "area" }, ... }

然后JSON.parse()应该没问题:

msg = JSON.parse(msg);

根据您其他评论的片段:

$retorno = " chart: { renderTo: 'grafica1', type: 'area', }, series: [{ data: [1,2,3] }]";
echo json_encode($retorno);
return; 

您可以使用Michael Krelin 的建议,即在array()s中形成数据并对其进行编码:

$retorno = array(
    'chart' => array(
        'renderTo' => 'grafica1',
        'type' => 'area'
    ),

    'series' => array(
        array('data' => array(1, 2, 3))
    )
);

echo json_encode($retorno);
return;

PHP 中的关联数组(具有命名键的数组)将Object在 JSON 中编码为 s,而非关联数组将保留为Arrays。


否则,您将不得不:eval() msg

msg = eval('(' + msg + ')');

如果输出缺少前导{,也添加它:

msg = eval('({' + msg + ')');

而且,括号强制将其评估为Expression,因此{...}被视为Object文字而不是blocks.

于 2013-10-21T19:43:13.763 回答
0

jQuery 中有一个名为 的函数$.parseJSON,它将返回一个从数据创建的对象。

因此,如果您有类似的 JSON:{'val1': 0} 您可以运行var data = $.parseJSON({'val1': 0});,这将使您能够通过对象获取值。

例如

data.val1

希望这可以帮助,

- 席德

这是文档的链接

于 2013-10-21T19:31:30.010 回答