我正在尝试为Raspberry Pi制作一个简单的Web GUI。 它应该使用PHP和JavaScript在图像上绘制温度值。从javascript调用PHP函数
我将在PHP和我正在编写的C++应用程序之间使用一些IPC。但现在我只想从文件中读取一个值并将其绘制在图像上。 (该文件是使用OWFS一个1-Wire总线的温度值)
我的问题
JavaScript函数ReadTemps()获取每5秒调用,但PHP值仅被更新时,页面刷新。
我的问题没有JavaScript的使用经验。
代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Still life web application</title>
<canvas id="myCanvas" width="768" height="576" style="border:0px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
<?php
function get_temp()
{
echo round(floatval(file_get_contents('/mnt/1wire/uncached/vessel/temperature')), 2);
}
?>
<script>
var bgImg = new Image();
bgImg.src = 'image.jpg';
function ReadTemps()
{
var vessel_temp = '<?php get_vessel_temp(); ?>';
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.drawImage(bgImg, 0, 0);
ctx.font="20px Georgia";
ctx.fillText(vessel_temp + '\u00B0', 330, 430);
setTimeout(ReadTemps, 5000);
}
window.onload = ReadTemps;
</script>
</head>
<body>
<a href="javascript:ReadTemps();">Update</a>
</body>
</html>
如果我在ReadTemps
添加警报( “你好”),它会弹出每隔5秒。
解决方案
<script>
var bgImg = new Image();
stillImg.src = 'image.jpg';
function ReadTemps()
{
var vessel_temp = loadXMLDoc('get_vessel.php');
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.drawImage(bgImg, 0, 0);
ctx.font="20px Georgia";
ctx.fillText(vessel_temp + '\u00B0', 330, 430);
setTimeout(ReadTemps, 5000);
}
function loadXMLDoc(file)
{
var xmlhttp;
if(window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET", file, false);
xmlhttp.send(null);
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
return xmlhttp.responseText;
else
return "error";
}
window.onload = ReadTemps;
</script>
谁会拿这个? :) 好的。 这是因为每次重新加载页面只生成一次,所以您的vessel_temp值只在页面生成时定义 - 您必须使用称为AJAX的东西。对不起,但我没有更多时间向你解释这一点。 –
@TK先生我想我明白了。 将检查出AJAX。 – John
请参阅[此问题](http://stackoverflow.com/q/4542863/1267304)。是ajax网络上数以千计的例子之一。 – DontVoteMeDown