我在 stackoverflow 上的第一篇文章。我正在开发一个系统,该系统结合了客户端 javascript、backbone.js 和 highcharts.js,以显示来自我家可再生能源系统的实时数据。
它使用一个称为 Arduino 的小型微控制器来处理低级别的传感器数据。控制器有自己的以太网硬件,我将它设置为小型服务器。
在我的客户端程序中,我使用 Backbone 作为 MVC,模型 URL 指向 Arduino 的 IP 以请求 json 数据包。效果很好。
我现在要做的是将该 URL 指针移动到我的托管站点,在那里我有一个小的 php 文件,可以将数据从 SQL 表中提取出来,并以相同的 json 格式呈现。
从我的浏览器中,当我从 Arduino 控制器请求 json 数据包时,它看起来像这样;
<head></head><body><pre>{"vT_pv":234.00,"iT_pv":5.90,"iS_pv":0.00,"vB_pv":27.51}</pre></body>
当我将浏览器指向我调用 php 的托管站点时,它看起来像这样;
<head></head><body><pre>{"vT_pv":230.70,"iT_pv":4.90,"iS_pv":0.00,"vB_pv":27.56}</pre></body>
编辑:已包含 Alex 要求的完整标题
两者看起来相同,但在我的客户端 javascript 中,只有第一个真正起作用,因为数据已成功放入模型中,然后在屏幕上可见。
两者之间的一个区别是,当我检查页面时,我的 Arduino 返回为 HTTP/1.0,而从我的托管站点返回的 json 数据是 HTTP/1.1
这足以引起这样的问题吗?
以下是该 json 的主干模型;
PollerModel = Backbone.Model.extend({
// url:'//xxx.xxx.xxx.xxx/poller.json', // this one works
url: 'http://yyy.yyy.yyy.yyy.host_site/sql_get_live.php', // this one does not
startUpdate: function() {
var that = this;
startUpdate(that);
function startUpdate(isThis) {
that.fetch({async:false});
pollerUpdateInterval = setTimeout(function(){startUpdate(that);}, 5000);
};
},
});
如您所见,一旦调用 startUpate 函数,它就会永远每 5 秒调用一次,这就是我想要的。
当我使用指向微控制器的第一个 URL 时,它就像一个魅力。当我使用第二个 URL 时,我可以看到它发出请求并得到回复,但它似乎对数据没有任何作用,它没有放入模型中。
因此,在我的客户端应用程序中,第一个 URL 我在呈现的视图上看到了数据,但在第二个 URL 中看不到。
以下是我在主机站点上的 php 文件;
<?php
// The JSON standard MIME header.
// header('content-type: application/json; charset=utf-8');
$con = mysql_connect('host', 'username', 'password');
if (!$con) {
die('mysql connect error: ' .mysql_error());
}
mysql_select_db("DataBase", $con);
$sql_Live = "SELECT * FROM live";
$mysql_record = mysql_query($sql_Live,$con);
$row = mysql_fetch_array($mysql_record);
$jsonData = '{"vT_pv":' . $row['vT_pv'] . ',"iT_pv":' . "4.90" . ',"iS_pv":' . $row['iS_pv'] . ',"vB_pv":' . $row['vB_pv'] . '}';
echo "<pre >";
echo $jsonData;
echo "</pre>";
mysql_close($con);
?>
被注释掉的标头对格式或任何结果都没有影响。我尝试过以各种方式使用 json 编码函数,但都没有成功。事实上,使用 json 编码会产生我认为是非 json 格式的东西,所以也许上面我使用的格式格式不正确?然而它适用于第一个 URL?
我已经搜索过,感觉有点卡在这里,所以我想是时候问我了。
保罗