来自数据记录器的实时JSON请求

时间:2014-04-09 20:13:13

标签: jquery json url

对于我们的能源仪表板,我已经制作了一个带有2个仪表的小部件,它们具有我们太阳能逆变器的有功功率值。我们使用数据记录器,它能够通过http请求发送带有所需参数的JSON字符串。在此脚本中,您会看到一个var SolarB(这是以http请求为例的实际JSON字符串)。这是为了检查值是否正确编码并显示在仪表中。 SolarA是现场json请求。这应该是SolarA和B的最终代码,以便建立实时连接。我已经尝试了几种方法来实现这项工作,在互联网和本论坛上搜索答案,但没有成功。我认为这是一个简单的问题,但它令我头疼......任何帮助都表示赞赏。

蒂亚

彼得

<!doctype html>

<html>
<head>
<title>Real time Data aquisition Solar inverters</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<style>
  body {
    text-align: center;
  }

  #g1, #g2 {
    width:250px; height:180px;
    display: inline-block;
    margin: 1em;
  }

  p {
    display: block;
    width: 550px;
    margin: 2em auto;
    text-align: left;
  }
</style>

<script src="resources/js/raphael.2.1.0.min.js"></script>
<script src="resources/js/justgage.1.0.1.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.0.js"></script>
<script>

{
 var SolarA = ""
    $.getJSON("//192.168.16.201/rest/devices/2912280908/values/variables/596355681/instant", function(data)
    { SolarA = data;
  });

 var SolarB = [{ "time": 1396898708, "value": 11.748850e+00, "unit": "kW" }, ];
 var g1, g2;

  window.onload = function(){
    var g1 = new JustGage({
      id: "g1", 
      value: document.getElementById.innerHTML=SolarA[0].value, 
      min: 0,
      max: 30000,
      title: "Production A",
      label: document.getElementById.innerHTML=SolarA[0].unit
    });

    var g2 = new JustGage({
      id: "g2", 
      value: document.getElementById.innerHTML=SolarB[0].value, 
      min: 0,
      max: 13800,
      title: "Production B",
      label: document.getElementById.innerHTML=SolarB[0].unit

    });

  };

 };

</script>

</head>
<body>    
<div id="g1"></div>
<div id="g2"></div>
</p>

</body>
</html>

1 个答案:

答案 0 :(得分:0)

我怀疑错误的是你在数据可用之前创建了仪表。

可能在创建仪表后返回您的数据,因此事件的顺序如下:

  1. $.getJSON("//192.168.16.201 ...被调用,
  2. 您的页面已完成加载,onload函数已执行,
  3. var g1 = new JustGage({ ...var g2 = new JustGage({ ...已创建
  4. 您的设备返回数据,function(data){ SolarA = data; }称为
  5. 请注意,在JS中,回调不会阻止脚本的执行,而是将来某个时候执行,因此在{{1}之后,您不能依赖它们在命令中执行}。

    如果是这种情况,解决问题的方法是将量表创建转移到回调函数中,这样:

    $.getJSON

    请注意,问题也可能是当您从不在<script> $(function(){ $.getJSON("//192.168.16.201/rest/devices/2912280908/values/variables/596355681/instant", function(data) { new JustGage({ id: "g1", value: document.getElementById.innerHTML = data[0].value, min: 0, max: 30000, title: "Production A", label: document.getElementById.innerHTML = data[0].unit }); } ); }); </script> 中的计算机查看您的网站时,数据根本无法访问 - JavaScript在客户端工作。在这种情况下,您需要编写一个客户端 - 服务器webapp。

    您也可能尝试执行cross site HTTP request