Javascript ajax 等到文件被更改


Javascript ajax wait until file is changed

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

sudo ./GPS.py forward 100 30

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

脚本打开位置.txt文件(看起来像"100/50/18"),并采用坐标 x=100、y=50 和 Alpha=18 递减。然后移动,计算新的协调并将其写入此文件。

阅读脚本顶部的部分:

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.

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

Javascript 运行 .PY 并等待它完成,然后 JS 打开.txt并获取数据,最后为我的网页设置新坐标。但我不知道该怎么做。这个等待.PY完成正在杀死我。

感谢您的帮助!亚克德2

附言。

在我的树莓派上安装了 apache,我可以通过网页加载我的.py脚本,我可以打开.txt文件。

执行此操作的经典 Web 方法是从客户端轮询,直到您被告知更改。

例如

  • 调整您的文件,使其包含更新的日期+时间。
  • 实现一个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,简单的轮询示例

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

它可能会起作用,实现起来非常简单,但会受到来自网页的达夫请求量的影响。 虽然请记住,网络已经做了很长时间做这种事情。

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

以下是为您提供基础知识的内容:

  • http://www.html5rocks.com/en/tutorials/websockets/basics/