stackoverflowに関する私の最初の投稿。私は、クライアント側のjavascriptとbackbone.jsおよびhighcharts.jsを組み込んで、自宅の再生可能エネルギーシステムからのリアルタイムデータを表示するシステムを開発しています。
Arduinoと呼ばれる小さなマイクロコントローラーを使用して、センサーデータを低レベルで処理します。コントローラには独自のイーサネットハードウェアがあり、小さなサーバーとしてセットアップしています。
クライアント側のプログラムでは、バックボーンをMVCとして使用し、モデルURLがArduinoのIPをポイントしてjsonデータパケットを要求します。うまく機能します。
私が今していることは、そのURLポインターを、SQLテーブルからデータを引き出して同じjson形式で表示するための小さなphpファイルがあるホストされたサイトに移動することです。
ブラウザから、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では、データがモデルに正常に配置されて画面に表示できるという点で、最初のJavaScriptのみが実際に機能します。
2つの違いの1つは、ページを調べると、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を使用すると、それは魅力のように機能します。2番目のURLを使用すると、リクエストを送信して応答を受け取ることがわかりますが、データには何の影響も与えていないようで、モデルに入れられていません。
したがって、クライアント側のアプリでは、最初のURLはレンダリングされたビューにデータを表示しますが、2番目のURLは表示しません。
以下は、ホストサイトにあるIhaveの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で機能しますか?
私はここで検索して少し行き詰まっていると感じているので、私が尋ねる時が来たと思いました。
ポール