2011-12-13 87 views
0

这是我今天挣扎着:如何将json从php传递给jqPlot的javascript?

我想绘制一个使用jqPlot库的图。 sql查询输出的数据通过使用json_encode在php中转换为json并保存在隐藏表单字段中。这工作得很好,实际字段包含:

[["2011-12-10 12:01:00",271],["2011-12-10 12:13:05",132],["2011-12-11 12:17:55",388],["2011-12-10 22:03:40",5],["2011-12-11 12:10:54",830]] 

然后从表单中的数据会以JavaScript通过检索:

var data = document.getElementById("dataarray").value; 

为了用它作为jqPlot数据以后。 该data变量的格式是否正确,并且当与JSON格式document.write(data);,输出正确的数据,但每当检查我将其放置在plot1变量内部使用的数据,它抛出在Safari Firefox中的错误[object Object]Uncaught #<Object>的曲线图。

整个javascript代码如下:

$(document).ready(function(){ 

    var data = document.getElementById("dataarray").value; 


    var test = [["2011-12-10 12:01:00",271],["2011-12-10 12:13:05",132],["2011-12-11 12:17:55",388],["2011-12-10 22:03:40",5],["2011-12-11 12:10:54",830]]; 
    var plot1 = $.jqplot("chart_personal_2", [data], { 
      title:"Data Point Highlighting", 
      axes:{ 
     xaxis:{ 
      renderer:$.jqplot.DateAxisRenderer, 
      numberTicks: 3, 
      tickOptions:{ 
      formatString:"%d/%m/%Y %H:%M:%S" 
      } 
     }, 
     yaxis:{ 
     label: "Elevation(m)", 
      tickOptions:{ 
      showMark: true 
      } 
     } 
      }, 
      highlighter: { 
     show: true, 
     sizeAdjust: 7.5 
      }, 
      cursor: { 
     show: false 
      } 
     }); 
}); 

我甚至尝试output = String(data);,但它也不能工作。 我假设我的data变量是一个不能用作jqPlot图形的源数据的对象,它需要在使用前转换为字符串?如我错了请纠正我。

希望有人知道如何解决没有,在此先感谢!

回答

4

您检索它作为String,但jqPlot期待Array,所以你要在其上运行eval

var data = document.getElementById("dataarray").value; 
eval('data = '+data+';'); 

或更好的解决方案:不要将它保存到隐藏的输入,但要JS变量从php:

echo "<script type='text/javascript'> var data = ".json_encode($data).";</script>"; 
+0

谢谢你,将它转换为数组解决了问题。我确信jqPlot也能够处理字符串,如果它是JSON格式的,但我可以看到我错了。 – 2011-12-13 18:32:53