2013-11-13 2 views
0

Я программирую веб-сайт для управления моим роботом малины Pi. Я за рулем два шаговых двигателя с помощью .py скрипта я называю это:Javascript ajax wait, пока файл не будет изменен

sudo ./GPS.py forward 100 30 

Кулаком Аргумент путь, второй, как много шагов, чтобы сделать, и последняя задержка между шагами.

Файл сценария open.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. 

Это работает, но я понятия не имею, как обновить X, Y, Alpha координаты от location.txt на моем сайте. У меня есть идея:

Javascript run .PY и ждать завершения, затем открыть JS-файл .txt и получить данные и, наконец, установить новые координаты на мою веб-страницу. Но я не знаю, как это сделать. Это ожидание финиша .PY убивает меня.

Благодарим за помощь! Yacked2

PS.

У меня установлен Apache на моей малине Pi, и я могу загрузить мой .py скрипт, хотя веб-страницу, и я могу открыть файл .txt.

ответ

1

Классическим способом сделать это будет опрос от клиента до тех пор, пока вам не будет рассказано об изменении.

E.g.

  • Измените свой файл так, чтобы он содержал дату + время, обновленное.
  • Реализовать PHP скрипт, чтобы открыть файл и обслуживать содержимое в виде объекта JSON (с датой обновляемой, X, Y и альфа как свойства)
  • При загрузке страницы, загружать расположение и хранить все 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 изменил.

Существует простой пример опроса описано здесь @ Джонни-Craig: jQuery, simple polling example

В этих примерах вы просто необходимо условие выхода на этот раз у вас есть данные, которые необходимы (распознаваться изменения in date_updated)

Это, вероятно, будет работать, быть довольно простым в реализации, но страдает от количества запросов на подачу, созданных с веб-страницы. Хотя имейте в виду, что веб работал в течение долгого времени, делая такие вещи.

В качестве альтернативы вы можете получить все HTML5 об этом и прочитать на веб-сайтах. Используя веб-файлы, вы можете инициировать обновление со стороны сервера, а не на стороне клиента. Требуется меньше опросов, и время ответа на клиента должно быть лучше.

Вот то, что даст вам основы:

+0

Но, как заставить .php ждать, пока .py не будет закончена? –

+0

Вам не обязательно. Вы можете заставить PHP вызвать скрипт python, а затем сразу вернуть основное содержимое страницы (за вычетом данных о местоположении), а затем обновить информацию о местоположении, когда она будет доступна. –

+0

О, спасибо, но эта часть: «клиент обновляет информацию о местоположении, когда он доступен». У меня проблема, теперь я вызываю php с помощью «window.location.href = script.py?speed=XX & ...», затем , запустите php run .py и немедленно вернитесь на домашний сайт, но как узнать, когда выполняется .py? –

Смежные вопросы