Javascript ajax等到文件被更改

时间:2013-11-13 14:58:23

标签: javascript php python html ajax

我正在编写一个网站来控制我的Raspberry Pi机器人。我正在使用.py脚本驱动两个步进电机我称之为:

sudo ./GPS.py forward 100 30

拳头论证是要走的路,第二个是要做多少步骤,最后一步是步骤之间的延迟。

脚本打开location.txt文件(看起来像“100/50/18”)并采取协调x = 100,y = 50和Alpha = 18 degress。然后移动,计算新的协调并将其写入此文件。

阅读脚本顶部的部分:

fo = open("location.txt", "r")
data = fo.read()
fo.close()
coordinates= data.split("/")
temp1 = coordinates[0]
temp2 = coordinates[1]
temp3 = coordinates[2]
Alpha= float(temp3)
X = float(temp1)
Y = float(temp2)

然后它会进行所有请求的移动和计算,然后在最后将新的X,Y,Alpha保存回文件:

 fo =open("location.txt", "w")
 fo.write(str(X)+"/"+str(Y)+"/"+str(Alpha))
 fo.close

好吧,这在Putty中非常完美,但是现在我想通过网站驱动我的机器人,所以我已经建立了网站来控制它。

但现在我遇到了问题。现在我有这样的网站:

HTTP --> Javascript --> PHP --> .PY script to move robot.

这有效,但我不知道如何从我的网站上的location.txt刷新X,Y,Alpha坐标。我有个主意:

Javascript运行.PY并等待它完成,然后JS打开.txt并获取数据,最后将新坐标设置到我的网页。但我不知道该怎么做。等待.PY结束就是杀了我。

感谢您的帮助! Yacked2

PS。

我在我的Raspberry Pi上安装了apache,我可以通过网页下载我的.py脚本,然后我可以打开.txt文件。

1 个答案:

答案 0 :(得分:1)

这样做的经典网络方式是从客户端进行轮询,直到您被告知更改为止。

E.g。

  • 调整您的文件,使其包含日期+时间更新。
  • 实施 PHP脚本以打开文件并将内容作为 JSON对象(更新日期,X,Y和Alpha作为属性)
  • 在加载页面时,加载位置并存储所有4个组件。
  • 当您向移动设备发送移动说明时,请开始轮询更改 - 定期重新加载 JSON对象,直到您有一个更新日期已更新。然后,您可以停止投票。
  • 然后应存储此更新的位置并用于更新您的页面。
  • 设置投票的最大次数,如果达到最大值,则会中止错误。

假设您的主页包含

<div id="locationInfo" />

你已经实现了PHP脚本getLocationInfo.php,它返回一个像这样的JSON对象:

{ date_updated: "13-11-2013 15:45:98",
  x_position: 105,
  y_position: 120,
  alpha: 123 }

在主页面中,您可以使用jQuery编写一个脚本(例如,某些内容 - 但更复杂)

$.get( "getLocationInfo.php", function( data ) {
  var html = 'Location: ' + data.x_position + ', ' + data.y_position + ' @' + data.alpha
  $( "#locationInfo" ).html( html );
});

上面真正缺少的是在date_updated发生变化时反复轮询和中止

@ johnny-craig在此描述了一个简单的民意测量示例jQuery, simple polling example

在这些示例中,只要您拥有所需的数据(通过date_updated更改识别),您就需要退出条件

它可能会起作用,实现起来非常简单,但是会受到网页上的duff请求数量的影响。虽然记住网络在很长一段时间内都在做这种事情。

或者,您可以获取有关它的所有HTML5并阅读websockets。使用websockets,您可以从服务器端而不是客户端发起更新。需要的轮询更少,客户端的响应时间应该更好。

这些内容可以为您提供基础知识: