我在 stackoverflow 上的第一篇文章。 我正在开发一个包含客户端 javascript 和 backbone.js 以及 highcharts.js 的系统,以显示来 self 家中可再生能源系统的实时数据。
它使用一个称为 Arduino 的小型微 Controller 来处理低级别的传感器数据。 Controller 有自己的以太网硬件,我将其设置为小型服务器。
在我的客户端程序中,我使用 Backbone 作为 MVC,模型 URL 指向 Arduino 的 IP 以请求 json 数据包。效果很好。
我现在正在做的是将该 URL 指针移至我的托管网站,我在该网站上有一个小的 php 文件,用于从 SQL 表中提取数据并以相同的 json 格式呈现。
当我从我的浏览器中请求来自 Arduino Controller 的 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的 Backbone 模型;
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 秒调用一次,这正是我想要的。
当我使用指向微 Controller 的第一个 URL 时,它就像一个魅力。 当我使用第二个 URL 时,我可以看到它发出请求并得到回复,但它似乎对数据没有做任何事情,它没有放入模型中。
所以在我的客户端应用程序中,我在第一个 URL 中看到了渲染 View 中的数据,但在第二个 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 encode 函数,但都没有成功。 事实上,使用 json 编码会产生我认为是非 json 格式的格式,所以我使用的上述格式可能格式不正确?但它适用于第一个 URL?
我已经搜索过了,感觉有点卡在这里,所以我想是时候问一下了。
保罗
最佳答案
我几乎毫不怀疑这是 header 的问题。
在 chrome go:view>developer>developer tools>network tab> 然后重新加载并从左侧面板中选择文件,然后查看“headers tab”,它会给你发送或接收的每个 http header 的详细信息你可以找出两个结果之间的差异。
你的 php header("content-type"...)
应该可以工作,但如果不行,它可能是 apache 覆盖了你的 PHP header();如果是这样,请更改 .htaccess
文件中的内容类型或删除 httpd.conf 中 .php 文件的 content-type text/html
属性。
关于php - 来自 PHP 的 Backbone JSON 请求问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898428/